J'ai rencontré une situation curieuse impliquant des méthodes génériques statiques. Voici le code:
class Foo<E>
{
public static <E> Foo<E> createFoo()
{
// ...
}
}
class Bar<E>
{
private Foo<E> member;
public Bar()
{
member = Foo.createFoo();
}
}
Comment se fait-il que je n'ai pas à spécifier d'arguments de type dans l'expression Foo.createFoo()
? Est-ce une sorte d'inférence de type? Si je veux être explicite à ce sujet, comment puis-je spécifier l'argument de type?
java
generics
static
type-inference
fredoverflow
la source
la source
Réponses:
Oui, il s'agit d'une inférence de type basée sur la cible de l'affectation, conformément à la section JLS 15.12.2.8 . Pour être explicite, vous appelleriez quelque chose comme:
la source
Foo.<E>createFoo();
Merci :)Foo.createFoo();
compile très bien ...? Est-ce dû à un effacement de type?E
est "déduit" d'êtreObject
E
serait de définircreateFoo()
prendre un argument de typeClass<E>
(ce serait le cascreateFoo(Class<E> type)
), et de l'appeler aveccreateFoo(String.class)