在下面的示例中,爲什麼編譯器能夠推斷Foo.test()
中第一次調用Foo.create()
的通用參數,但第二次不能這樣做?我使用Java 6爲什麼javac不能推斷用作參數的函數的泛型類型參數?
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
}
}
}
(編譯錯誤是在類型Nonsense.Bar的方法FUNC(Nonsense.Foo)不適用於參數(Nonsense.Foo))。
注意:我知道編譯器錯誤可以通過test()中的第三行修復 - 我很好奇是否存在一個特定的限制,防止編譯器能夠推斷出類型。它出現對我來說,這裏有足夠的上下文。
我不確定你期望得到什麼答案,除了「它不夠聰明」。 –
@路易斯 - 可以想象,這是不可能夠聰明,但我還沒有弄清楚爲什麼。 – bacar
@bacar:它可能足夠聰明,但它不是。 –