Вызов статических обобщенных методов - PullRequest
92 голосов
/ 14 марта 2011

Я столкнулся с любопытной ситуацией, связанной со статическими обобщенными методами. Это код:

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

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

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

Почему мне не нужно указывать аргументы типа в выражении Foo.createFoo()? Это какой-то вывод типа? Если я хочу быть явным об этом, как я могу указать аргумент типа?

1 Ответ

151 голосов
/ 14 марта 2011

Да, это вывод типа, основанный на цели назначения, согласно раздел 15.12.2.8 JLS. Чтобы быть явным, вы бы назвали что-то вроде:

Foo.<String>createFoo();
...