? super T与? extends K的区别?
时间: 2023-06-28 20:05:43 浏览: 223
泛型中? super T和? extends T的区别
这是Java中泛型中的通配符,用于表示类型参数的上界和下界。
`? super T`表示未知类型是T的超类(包括T本身),即所有类型T的父类。这意味着我们可以将类型为T或其子类的对象赋值给这个通配符。
`? extends K`表示未知类型是K的子类(包括K本身),即所有类型K的子类。这意味着我们可以从这个通配符获得类型为K或其子类的对象。
例如,考虑以下代码:
```java
public void addObjects(List<? super Integer> list) {
list.add(1);
list.add(2);
}
public void printObjects(List<? extends Number> list) {
for(Number num : list) {
System.out.println(num);
}
}
```
在第一个方法中,我们使用`? super Integer`通配符来表示未知类型是Integer的超类。这意味着我们可以将类型为Integer或其父类的对象添加到列表中。在第二个方法中,我们使用`? extends Number`通配符来表示未知类型是Number的子类。这意味着我们可以从列表中获得类型为Number或其子类的对象并打印它们。
注意,`? super T`通配符用于写入数据,`? extends K`通配符用于读取数据。如果我们需要既要读又要写,那么我们需要使用未限定的通配符`?`。
阅读全文