java泛型中,extends和super

三个基本类型定义

1
2
3
4
5
class Parent {}

class SubA extends Parent {}

class SubB extends Parent {}

extends

1
2
3
4
List<? extends Parent> list = new ArrayList<>();
// 报错
list.add(new SubA());
list.add(new SubB());

报错原因:
extends 指定类型的上界,什么意思呢?
即:? extends Parent 表示Parent的子类,但是具体不能确定是哪个子类
List<? extends Parent> 可能是List<SubA>, List<SubB>, 所以add报错

super

1
2
3
List<? super Parent> list = new ArrayList<>();
list.add(new SubA());
list.add(new SubB());

编译通过,原因:
super指定类型的下界
即: ? super Parent 表示类型只能为Parent或Parent的父类, 那么当添加元素时,由于子类可以转换为父类,所以只要是Parent的子类,都可以添加成功
List<? super Parent> 可能是List<Parent>, List<Object>, 所以,add时,作为Parent的子类, 自然不会报错

Remark:用自己最能理解的方式表达出来!
Remark Again: ? super Parent & ? extends Parent表示的是传给List的泛型参数,将其作为一个整体来看待的话

文章目录
  1. 1. 三个基本类型定义
  2. 2. extends
  3. 3. super
,