在下面的代码中,get()
被调用并将其结果分配给类型为 的变量List<List<?>>
。get()
返回 aList<List<T>>
并在其类型参数T
设置为的实例上调用?
,因此它应该适合。
import java.util.List;
class Test {
void foo(NestedListProducer<?> test) {
List<List<?>> a = test.get();
}
interface NestedListProducer<T> {
List<List<T>> get();
}
}
但是 IntelliJ IDEA 和 Oracle 的javac
1.7.0_45 版本都拒绝我的代码无效。这是“javac”的错误消息:
java: incompatible types
required: java.util.List<java.util.List<?>>
found: java.util.List<java.util.List<capture#1 of ?>>
为什么此代码无效,即如果允许,会出现什么问题?