<? extends T>和<? super T>:上下界通配符的界限和使用
发布日期:2021-10-06 14:20:07
浏览次数:2
分类:技术文章
本文共 1152 字,大约阅读时间需要 3 分钟。
- <? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”
- <? super T>:是指 “下界通配符(Lower Bounds Wildcards)”
举一个简单的例子:
1、上界通配符
三个类:红苹果类继承苹果类,苹果类继承水果类
list //表示可能是一个苹果或者苹果子类的集合所以就有了一下的这几种情况
List list1 = new ArrayList前两种情况是编译通过的,第三种情况编译错误。();List list2 = new ArrayList ();List list3 = new ArrayList ();
2、下界通配符
List list//表示可能是苹果或者苹果超类的集合相同的三种情况
List list4 = new ArrayList第一种情况编译错误,后两种情况编译通过();List list5 = new ArrayList ();List list6 = new ArrayList ();
3、上下界通配符的副作用
①、上界通配符
以List<? extends Apple> list = new ArrayList<Apple>();为例
在调用list的add方法的时候我们可以看到下面的提示:
原因在于,编译器只知道这个集合的泛型类型是苹果的子类,但是至于那个子类,编译器无法确定,就导致了集合中除了null,其他的什么都放不进去。而对于上界的取操作,则没有任何的影响,依然通过下标进行获取集合中的对象。
②、下界通配符
以List<? super Apple> list = new ArrayList<Apple>();为例
调用时候的提示:
我们可以看到能够放入苹果类型的对象,也就意味着,苹果或者苹果子类的对象都可以放入集合中。原因在于,编译器知道这个集合的泛型是苹果的超类,那么里面的对象只要是苹果或者苹果的子类,肯定是满足集合的要求的。
而对于取操作则要受到一定的影响:
从编译器的角度,我能够知道这个集合的泛型是苹果的超类,但是里面的对象究竟是苹果还是水果,则不得而知,只能用最大的界限object。
4、上下界通配符的使用
遵循PECS(Producer Extends Consumer Super)原则:
- 频繁往外读取内容的,适合用上界Extends。
- 经常往里插入的,适合用下界Super。
转载地址:https://blog.csdn.net/m0_37664906/article/details/78320448 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年03月30日 11时56分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
虚拟机卡死在登录界面
2021-06-30
架构图、用例图、流程图、时序图、类图
2021-06-30
Github 与 Git,新手初次接触的尴尬历程
2021-06-30
我要偷偷的学Python,然后惊呆所有人(第二天)
2019-04-27
我要偷偷的学Python,然后惊呆所有人(第三天)
2019-04-27
我要偷偷的学Python,然后惊呆所有人(第四天)
2019-04-27
测试文档
2019-04-27
温故Linux后端编程(三):线程那些事儿
2019-04-27
我用过的设计模式(5)-- 中介者模式
2019-04-27
为实习准备的数据结构(9)-- 跳表
2019-04-27
为实习准备的数据结构(10)-- 哈希散列表
2019-04-27
为实习准备的数据结构(11)-- 图论算法 集锦
2019-04-27
“为实习准备的数据结构” 系列 -- 导航篇
2019-04-27
hiredis从安装到实操,一条龙服务
2019-04-27
【C++】算法集锦(7)滑动窗口
2019-04-27
高性能MySQL(三):Schema与数据类型优化
2019-04-27
【C++】算法集锦(8):从两数和问题拓展到一百数和问题
2019-04-27
【C++】算法集锦(9):背包问题
2019-04-27
【C++】算法集锦(10)通俗讲kmp算法
2019-04-27
【C++】算法集锦(12):高楼扔鸡蛋
2019-04-27