Me he encontrado con una situación curiosa que involucra métodos genéricos estáticos. Este es el código:
class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}
class Bar<E>
{
private Foo<E> member;
public Bar()
{
member = Foo.createFoo();
}
}
¿Cómo es que no tengo que especificar ningún tipo de argumento en la expresión Foo.createFoo()? ¿Es esto algún tipo de inferencia de tipo? Si quiero ser explícito al respecto, ¿cómo puedo especificar el argumento de tipo?
java
generics
static
type-inference
fredoverflow
fuente
fuente

Respuestas:
Sí, esta es una inferencia de tipo basada en el objetivo de la asignación, según la sección 15.12.2.8 de JLS . Para ser explícito, llamarías a algo como:
fuente
Foo.<E>createFoo();Gracias :)Foo.createFoo();compila bien ...? ¿Esto se debe al borrado de tipo?Ese "infiere" que esObjectEsería definircreateFoo()tomar un argumento de tipoClass<E>(así seríacreateFoo(Class<E> type)) y llamarlo concreateFoo(String.class)