Pourquoi ne peut-javac déduire de type générique arguments pour les fonctions utilisées comme arguments?

Dans l'exemple suivant, pourquoi le compilateur en mesure d'en déduire les arguments génériques pour le premier appel à Foo.create() dans Foo.test(), mais pas en mesure de le faire dans la seconde? Je suis à l'aide de Java 6.

public class Nonsense {
    public static class Bar {
        private static void func(Foo<String> arg) { }
    }

    public static class Foo<T> {

        public static <T> Foo<T> create() {
            return new Foo<T>();
        }

        private static void test() {
            Foo<String> foo2 = Foo.create(); //compiles
            Bar.func(Foo.create());          //won't compile
            Bar.func(Foo.<String>create());  //fixes the prev line
        }
    }
}

(L'erreur de compilation est La méthode func(un non-sens.Foo) dans le type de non-sens.La barre n'est pas applicable pour les arguments (un non-sens.Foo)).

Remarque: je comprends l'erreur de compilation peut être fixé par la troisième ligne en test() - je suis curieux de savoir si il ya une limitation spécifique qui empêche le compilateur d'être en mesure de déduire le type. Il apparaît pour moi qu'il y est assez de contexte pour elle ici.

Je ne suis pas sûr de ce que la réponse que vous attendez, autre que "ce n'est pas assez intelligent."
Il est concevable qu'il n'est pas possible d'être assez intelligent, mais je n'ai pas compris pourquoi, encore.
Il est probablement possible d'être assez intelligent, il n'est tout simplement pas.

OriginalL'auteur bacar | 2013-02-01