В следующем примере почему компилятор может вывести общие аргументы для первого вызова Foo.create()
в 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
}
}
}
(Ошибка компиляции - метод func (Nonsense.Foo) в типе Nonsense.Bar не применим для аргументов (Nonsense.Foo)).
Примечание. Я понимаю, что ошибка компилятора может быть исправлена третьей строкой в test(). Мне любопытно, существует ли определенное ограничение, которое мешает компилятору вывести тип. Мне кажется, что здесь достаточно контекста.