在以下代码中,调用了
get()
并将其结果分配给一个变量,该变量的类型为List<List<?>>
。 get()
返回List<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 ?>>
为什么这段代码是无效的,即如果允许它会发生什么问题?
List<Number>
时,代码可以接受一个List<String>
... 所以,是的,你不应该将变量声明为List<?>
。 - Luiggi MendozaList<Number>
以外的任何东西。List<?>
无法转换为List<Number>
,所以我不认为有什么问题。 - FeuermurmelList<String> a = null; List<?> b = a;
但是这个不行:List<List<String>> a = null; List<List<?>> b = a;
- ZhongYuList<List<*>>
。 - Paul Bellora