Вызов статических универсальных методов


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

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

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

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

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

1 85

1 ответ:

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

Foo.<String>createFoo();