这是我参与更文挑战的第13天,活动详情查看: 更文挑战
今天 4ye 来和小伙伴们分享下 泛型的上下限 啦
博主经常混淆了泛型的上限和下限的使用。。🐖,正巧在阿里巴巴的java开发手册——《Java开发手册(嵩山版)》中看到有关泛型的这个知识点👍,写写笔记,希望不要再忘啦😄
如下图:
概念:PECS(Producer Extends Consumer Super) 😐
实体类
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>
用在频繁添加数据的场景
最后
欢迎小伙伴们来一起探讨问题~
如果你觉得本篇文章还不错的话,那拜托再点点赞支持一下呀😝
让我们开始这一场意外的相遇吧!~
欢迎留言!谢谢支持!ヾ(≧▽≦*)o 冲冲冲!!
我是4ye 咱们下期很快再见!!