这两个有区别List吗?
List<Something> a;
List<? extends Something> b;
Run Code Online (Sandbox Code Playgroud)
我知道这个例子
List<Object> a;
List<?> b;
List c;
Run Code Online (Sandbox Code Playgroud)
和
List<Something> a;
List<? extends SomeInterfaceSomethingImplements> b;
Run Code Online (Sandbox Code Playgroud)
各有所不同,但这些怎么样?如果Something换成了它会有所不同Object吗?
List<Object> a;
List<? extends Object> b;
Run Code Online (Sandbox Code Playgroud)
Har*_*non 10
List<Something>是类型对象的列表Something.
List<? extends Something>是一个扩展的特定类型的对象列表Something.
因此,List<Object>可以包含任何扩展的类的对象Object.但是List<? extends Object>只能初始化或指定为扩展的特定类的对象的ListObject
什么时候有用?假设你要编写需要一个方法List的Objects并打印每个项目:
void print(List<Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,让我们说你有一个List<Integer>.你不能将它传递给上面的方法,因为printtake List<Object>,并且List<Integer>不能分配给a List<Object>.为了解决这个问题,我们重新定义print为:
void print2(List<? extends Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我们可以将Object的任何子类的List传递给print2.print2会接受List<Integer>,List<String>等等.
另一方面,您无法在列表中添加任何内容print2,因为print2不知道使用的具体子类型Object.因此,您? extends ...只能在不必添加任何内容的方法中使用List.