Encontrei uma situação curiosa envolvendo métodos genéricos estáticos. Este é o código:
class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}
class Bar<E>
{
private Foo<E> member;
public Bar()
{
member = Foo.createFoo();
}
}
Por que não preciso especificar nenhum argumento de tipo na expressão Foo.createFoo()
? Isso é algum tipo de inferência de tipo? Se eu quiser ser explícito sobre isso, como posso especificar o argumento de tipo?
7
Eu recomendo que você altere o parâmetro de tipo E do método createFoo. Porque o parâmetro de tipo E da classe Foo é diferente do parâmetro de tipo E do método createFoo ().
—
Gursel Koca
@GurselKoca Ele poderia explicitamente fazer member = Foo. <E> createFoo (); exigindo que sejam iguais ao tempo de compilação.
—
George Xavier de