在下面的示例中,为什么编译器能够推断出在Foo.test()中第一次调用Foo.create()的通用参数,但是在第二个样例中却不能这么做?我正在使用
Java 6.
public class Nonsense {
public static class Bar {
private static void func(Foo arg) { }
}
public static class Foo {
public static Foo create() {
return new Foo();
}
private static void test() {
Foo foo2 = Foo.create(); // compiles
Bar.func(Foo.create()); // won't compile
Bar.func(Foo.create()); // fixes the prev line
}
}
}
(编译错误是Nonsense.Bar类型的func(Nonsense.Foo)方法不适用于参数(Nonsense.Foo)).
注意:我明白编译器错误可以通过test()中的第三行修复 – 我很好奇是否有一个特定的限制,阻止编译器能够推断类型.在我看来,这里有足够的语境.