web-dev-qa-db-ja.com

静的ジェネリックメソッドの呼び出し

静的ジェネリックメソッドを含む奇妙な状況に遭遇しました。これはコードです:

_class Foo<E>
{
    public static <E> Foo<E> createFoo()
    {
        // ...
    }
}

class Bar<E>
{
    private Foo<E> member;

    public Bar()
    {
        member = Foo.createFoo();
    }
}
_

Foo.createFoo()で型引数を指定する必要がないのはなぜですか?これはある種の型推論ですか?それについて明示したい場合、どのようにtype引数を指定できますか?

93
fredoverflow

はい、これは JLSセクション15.12.2.8 に従って、割り当てのターゲットに基づく型推論です。明確にするために、次のように呼び出します。

Foo.<String>createFoo();
154
Jon Skeet