List<Something>是类型对象的列表Something。
List<? extends Something>是扩展的某些特定类型的对象列表Something。
所以,List<Object>可以有任何扩展类的对象Object。但List<? extends Object>只能初始化或分配为扩展的特定类的对象的列表Object
这什么时候有用?假设您要编写一个方法,该方法采用 a ListofObjects并打印每个项目:
void print(List<Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
现在,假设您有一个List<Integer>. 您不能将它传递给上述方法,因为print需要List<Object>, 并且List<Integer>不能分配给List<Object>. 为了解决这个问题,我们重新定义print为:
void print2(List<? extends Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
现在,我们可以将 Object 的任何子类的 List 传递给print2. 会print2接受List<Integer>等List<String>
另一方面,你不能在里面的列表中添加任何东西print2,因为print2不知道使用的具体子类型Object。因此,您? extends ...只能在不需要向List.