web-dev-qa-db-fra.com

Appel de méthodes génériques statiques

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?

93
fredoverflow

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();
154
Jon Skeet