<? extends R> 和 <? super T>

<? extends R> ?匹配的类型是R以及R的子类.确定了类型的上限.表示为上界通配符,不能做添加操作(可以进行初始化),用于读取操作.因为确定了上限是R读取出的所有内容均是R本身(或子级)


<? super T>

?匹配的类型是T或T的基类,确定了类型的下限.表示为下界通配符,可以进行添加操作(只能添加T类型或T的子级)因为不确定基类是哪种类型读取时只能用object接收.


1.1 概念理解

<? super T>:表示?匹配的类型都是T的父类,包括T本身。

<? extends R>:表示?匹配的类型都是类型R的子类,包括R本身。

1.2 使用List协助理解

1.2.1 List<? extends R>

List<? extends R> list:表示集合中存放的都是R的子类(包括R本身)。

针对变量List<? extends R> list。

(1)对List做添加(add(R))操作,必须使用R或者R的子类添加到list中。

(2)对List做遍历查询操作,必须使用R遍历list,取出元素.

小结:拿到一个变量使用? extends R修饰时,应该是对该变量做查询或取元素操作,不做添加操作。这种方式修饰叫做get原则。

1.2.2 List<? super T>

List<? super T> list:表示集合中存放的都是T的父类(包括T本身)。

针对变量List<? super T> list。

(1)对List做添加(add(T))操作,必须使用T或者T的子类添加到list中。

(2)对List做遍历查询操作,必须使用T父类去遍历list,取出元素。

小结:拿到一个变量使用? super T修饰时,应该是对该变量做添加操作,不做查询操作。这种方式修饰叫做put原则。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容