次のサンプルでは、コンパイラがFoo.create()
inの最初の呼び出しでジェネリック引数を推論できるのにFoo.test()
、2 番目の呼び出しでは推論できないのはなぜですか? 私は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
}
}
}
(コンパイルエラーはThe method func(Nonsense.Foo) in the type Nonsense.Bar is not applied for the arguments (Nonsense.Foo)です)。
注: コンパイラ エラーは test() の 3 行目で修正できることを理解しています - コンパイラが型を推測できないようにする特定の制限があるかどうかに興味があります。ここには十分な文脈があるように思えます。