class Demo {
<T> void gTee(List<List<T>> tl) {
tee(tl);
}
void tee(List<List<?>> tl) {
}
}
JDK 8说
incompatible types: java.util.List<java.util.List<T>> cannot be converted to java.util.List<java.util.List<?>>
为什么?我认为?
通配符代表任何类型。
答案 0 :(得分:4)
这是由于Java泛型的这种行为:
即使
A
和B
是兼容类型,SomeType<A>
也与SomeType<B>
不兼容
一个典型的例子就是尝试将List<Cat>
分配给List<Animal>
。
同样的事情发生在这里。通常,List<T>
可以分配给List<?>
。但是,由于您要将List<List<T>>
分配给List<List<?>>
,所以不能。
答案 1 :(得分:4)
阿。圣洁立方体。我应该知道,但我没有想到:
现在编译:
class Demo {
<T> void gTee(List<List<T>> tl) {
tee(tl);
}
void tee(List<? extends List<?>> tl) {
}
}