实体类
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>
用在频繁添加数据的场景