内容概览
泛型上下限理解,这下忘不了😝
博主经常混淆了泛型的上限和下限的使用。。🐖,正巧在阿里巴巴的java开发手册——《Java开发手册(嵩山版)》中看到有关泛型的这个知识点👍,写写笔记,希望不要再忘啦😄
如下图:
概念:PECS(Producer Extends Consumer Super) 😐
实体类
/**
* @author RYZEYANG
* @date 2020/10/11 23:50
*/
public class Fruit {
}
class Apple extends Fruit{}
class Pear extends Fruit{}
class Orange extends Fruit{}
泛型的上限
如下图,可以看到这里是不允许再添加任何实例的,只能从该list中去获取实例。
为什么不能添加呢?🐖
因为这个list 可能有以下几个情况
- list是Fruit类型的,此时你去添加Fruit的子类都没问题
- list是Apple类型的,此时你只能添加Apple,同理Pear,Orange也是。🙃
根本不晓得传进来的参数list会是哪种类型,当然不能随意添加啦,
如果list是Apple类型的,那就不能添加除Apple之外的,那如果是Pear呢,也一样,所以就全都不能添加啦。
为什么可以取出呢?🐖
因为我们从list中拿出来的必定是Fruit类型的,毕竟Apple等都去继承Fruit了,可以自动向上转型✌
泛型的下限
如图,下限和上限相反,上限get,下限add
可以看到下图get拿到的都是object类型,没有意义🐖
为什么super可以添加呢?🐖
这里定义了下限是Fruit,也就是说这个list里面的类型都是Fruit的父类,所以我们只能添加Fruit和他的子类。
为什么不可以取出呢?🐖
因为取的时候没法确实是Fruit的哪个父类,最后都只能获取我们的根类Object
小结
泛型的上限<? extends T>
用在频繁获取数据的场景,
泛型的下限<? super T>
用在频繁添加数据的场景