J'ai rencontré une situation curieuse impliquant des méthodes génériques statiques. C'est 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'argument 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?
Oui, il s'agit d'une inférence de type basée sur la cible de l'affectation, conformément à section JLS 15.12.2.8 . Pour être explicite, vous appelez quelque chose comme:
Foo.<String>createFoo();