在下面的示例中,为什么编译器能够推断出第一次调用Foo.create()
in的通用参数Foo.test()
,但不能在第二次调用中推断出来?我正在使用 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
}
}
}
(编译错误是Nonsense.Bar 类型中的方法 func(Nonsense.Foo) 不适用于参数 (Nonsense.Foo))。
注意:我知道编译器错误可以通过 test() 中的第三行修复 - 我很好奇是否存在阻止编译器推断类型的特定限制。在我看来,这里有足够的上下文。