泛型中上下界限定符extends 和 super
回答
1、定义
- extends
<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类。

- super
<? super T> 表示类型下界(Java Core 中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object

2、读写操作限制
<? extends T>
- 读取:安全,可读取
Number类型数据
- 写入:禁止,
<? super T>
- 读取:禁止,
- 写入:安全,可添加
Number或其子类
3、适用场景
| 场景 | 推荐通配符 | 典型用例 |
|---|
| 需要读取数据(如遍历) | ? extends Number | 处理多种数值类型的集合(如List<Integer>、List<Double>) |
| 需要写入数据(如添加) | ? super Number | 向通用容器中添加数值对象(如List<Object>) |
| 需要同时读写 | 避免使用通配符 | 明确指定具体类型(如List<Number>) |
4、代码示例
List<? extends Number> extendsList = new ArrayList<Integer>();
Number num = extendsList.get(0);
extendsList.add(1);
List<? super Number> superList = new ArrayList<Object>();
superList.add(1);
Object obj = superList.get(0);