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?E
se "infiere" que esObject
E
sería definircreateFoo()
tomar un argumento de tipoClass<E>
(así seríacreateFoo(Class<E> type)
) y llamarlo concreateFoo(String.class)