Warum kann Javac keine generischen Typargumente für Funktionen ableiten, die als Argumente verwendet werden?

Warum kann der Compiler im folgenden Beispiel die generischen Argumente für den ersten Aufruf von ableitenFoo.create() imFoo.test(), aber nicht in der Lage, dies in der zweiten zu tun? Ich benutze 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
        }
    }
}

(Der Kompilierungsfehler istDie Methode func (Nonsense.Foo) vom Typ Nonsense.Bar gilt nicht für die Argumente (Nonsense.Foo)).

Hinweis: Ich verstehe, dass der Compilerfehler durch die dritte Zeile in test () behoben werden kann. Ich bin gespannt, ob es eine bestimmte Einschränkung gibt, die den Compiler daran hindert, auf den Typ zu schließen. Eserscheint mir ist klar, dass es hier genug kontext dafür gibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage