JDK8,代码如下:
public class Foo<E> { public <T extends List> T get(T list) { return null; } public void pass(Foo<?> foo) { ArrayList arrayList = foo.get(new ArrayList()); } public void broken(Foo foo) { // 编译器报错 Incompatible types,无法转化为ArrayList ArrayList arrayList = foo.get(new ArrayList()); } }
Foo
的泛型参数E
和get
方法的泛型参数T
不同,按理来说是否声明Foo
为泛型应该不影响get
方法啊.
这是JAVA作者由于某种原因有意为之,还是编译器的推断能力不足.
倚天杖
相关分类