Java的泛型中,通配符可以设置上限和下限。

上限:<? extends T> ?是T和T的子类

下限:<? super T> ?是T和T的父类

怎么看待这个上限和下限呢 首先应该想 其实对于Java来说 <? extends T> <? super T> 是两个确定的类型,因为它不可能由你的赋值完了再确定吧。所以,对于<? extends T> 来说,集合里的元素应该是什么类型呢?应该是T类型,因为你添加的是T或者T的子类,设置为T就可以激发多态了。是了,所以你也只能从这个集合中取出T类型,因为它里面的元素本来设置的就是T类型,你赋值进去只不过是将T的子类赋值给了T,多态。但是呢,你就不能给这个集合里添加元素了,因为这个集合里元素的类型是T,假如可以添加元素,你初始化的时候初始化成T的一个子类,然后添加值的时候,却添加的另一个子类,事实上是可以添加的,因为集合元素类型是T,但里面就有了多种T的子类,好了,你初始化的时候是这个子类,你取出元素的时候肯定也想着取出的是可以给这个子类赋值的类型,但很有可能取出来的是T的另一个子类,你没法赋值,因为你允许添加另一个子类。所以一开始就禁止添加元素是对的。

<? super T>里面的元素,应该设置为什么呢?显然应该是object,因为系统不知道你会把?当成什么,所以只能设置成object,所以你取出元素的时候,取出的是object类。可不可以添加元素呢?可以,因为下限有保证,所以可以添加T和T的子类。你初始化的时候,初始化的是T的某个父类,好了,你现在取元素,你希望取出的是你初始化的那个父类,因为你只能添加T和T的子类,所以你取出的元素,肯定可以赋值给那个父类。

综上,<? extends T> 不可以添加元素,但可以取出类型为T的元素。 <? super T> 可以添加T或者T的子类,取出的一定是object类。

最新文章

  1. go reflect
  2. yii2.0邮箱发送
  3. mongodb sharding配置
  4. matlab文件操作及读txt文件(fopen,fseek,fread,fclose)
  5. 2016年10月28日 星期五 --出埃及记 Exodus 19:13
  6. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 .
  7. Unity中的单实例
  8. WEB开发者必备的7个JavaScript函数
  9. VM Depot 分布式计算框架主题应用精选
  10. C# 内存管理优化畅想(一)---- 大对象堆(LOH)的压缩
  11. JavaScript 继承机制小记
  12. 论JS的重要性
  13. 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层
  14. 在block内如何修改block外部变量
  15. 用‘+=’拼接字符串,打印时总会出现一个undefined
  16. Python Face Detect Offline
  17. MySQL在线DDL gh-ost 使用说明
  18. 阿里云挂载硬盘(windows)
  19. Redis-05.主从复制与Sentinel
  20. netty的解码器和粘包拆包

热门文章

  1. zepto.fullpage
  2. ACM学习历程—Hihocoder 1178 计数(位运算 &amp;&amp; set容器)(hihoCoder挑战赛12)
  3. ACM学习历程——NOJ1113 Game I(贪心 || 线段树)
  4. 高性能的序列化与反序列化:kryo的简单使用
  5. mac hosts
  6. CAS单点登录学习(二):客户端配置
  7. Docker入门(一):简介
  8. IOS要用到的零碎东西
  9. 《精通Spring4.X企业应用开发实战》读后感第四章(Application中Bean的生命周期)
  10. 【机器学习】迭代决策树GBRT(渐进梯度回归树)