如第二十五条所述,参数化类型是不可变的。类型Type1和Type2而言,不管Type1与Type2的关系,List<Type1>既不是List<Type2>的子类型,也不是也不是它的超类型。那么按理来说我们声明了 一个List<Object>的变量,应该只能把Object类型的对象放入其中,但是我们知道可以把Object的子类放入其中。

同样我们声明了一个List<Number>的变量,不仅仅可以把Number类型的对象放入其中,也可以把Integer和Long等类型的对象放入其中。

之所有可以这样做,是因为有限制的通配符给我们带来了便利。

为了获得最大限度的灵活性,要在表示生产者或者消费者的输入参数上使用通配符类型。如果某个参数既是生产社,又是消费者,那么通配符类型对你就没有什么

好处了:因为你需要的是严格的类型匹配,这是不用任何通配符而得到的。

PECS 表示 producer-extends , consumer-super

不要用通配符类型作为放回类型,也就是不要用<? extends  E>等这样的类型,而是使用<E>。因为调用一个方法,我们总是希望得到一个具体的类型结果,

而不是让客户端程序员去猜应该返回一个什么样类型的结果。

转载于:https://www.cnblogs.com/wangliyue/p/4480917.html

第二十八条:利用有限制通配符来提升API的灵活性相关推荐

  1. Effective Java 泛型 第28条:利用有限制通配符来提升API的灵活性

    如第25条所述,参数化类型是 不可变的(invariant).换句话说,对于任何两个截然不同的类型tyle1和type2来说,List< Type1>既不是List< Type2&g ...

  2. 小甲鱼Python3学习笔记之第二十八讲(仅记录学习)

    第二十八讲:文件:因为懂你,所以永恒 一.知识点: 0.file对象利用open函数来创建. 1.file文件的打开模式:f = open('文件地址','r/w/x/a等') 'r':只读模式,以只 ...

  3. NeHe OpenGL第二十八课:贝塞尔曲面

    NeHe OpenGL第二十八课:贝塞尔曲面 贝塞尔曲面: 这是一课关于数学运算的,没有别的内容了.来,有信心就看看它吧. 贝塞尔曲面 作者: David Nikdel ( ogapo@ithink. ...

  4. 名词解释第二十八讲:跨链

    这里是王团长区块链学院,与最优秀的区块链人一起成长!今天给大家讲讲跨链. 点击观看视频教程:名词解释第二十八讲:跨链 随着区块链技术的发展,出现了越来越多的链,包括公有链.联盟链.私有链层出不穷,但每 ...

  5. 左耳听风 第二十八周

    左耳听风 第二十八周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  6. 南航计算机学院陈兵,我校人工智能研究院赴中国电子科技集团第二十八研究所开展无人系统交流...

    6月8日,我校人工智能研究院组队前往中国电子科技集团第二十八研究所进行交流会谈,共商筹建"无人系统联合创新实验室".二十八所参会代表为首席科学家黄强.副总工程师赵春光.科技创新处主 ...

  7. Effective Java之利用有限制通配符提升API的灵活性(二十八)

    下面先举出一个泛型栈的例子: class Stack<E>{private List<E> element;private int index;private int defa ...

  8. 老总给大学生的十八条忠告(说的很有道理)

    一.读大学,究竟读什么? 大学生和非大学生最主要的区别绝对不在于是否掌握了一门专业技能--一个经过独立思考而坚持错误观点的人比一个不假思索而接受正确观点的人更值得肯定--草木可以在校园年复一年地生长, ...

  9. 【辞职理由】三十八条最好的辞职理由

    http://news.hrloo.com/lingshou/20580_all.html 每个职场人都会经历辞职?但是在辞职时,却不知道用什么理由最好,下面是辞职的三十八个理由,职场人辞职的时候可以 ...

最新文章

  1. 利用Eclipse/MyEclipse 实体类生成.hbm.xml文件
  2. “池哥昼”的一件趣事
  3. SecureCRT上传和下载文件(下载默认目录)
  4. kegra:用Keras深度学习知识图
  5. 【PySpark入门】手把手实现PySpark机器学习项目-回归算法
  6. 人脸识别的python实现代码_手把手教你用1行代码实现人脸识别 --Python Face_recognition...
  7. java ssm如何上传图片_ssm整合-图片上传功能(转)
  8. ORACLE数据库的连接
  9. stride padding_关于Padding实现的一些细节
  10. Onvif协议学习:5、设备搜索
  11. redies基本数据结构
  12. 国考计算机怎么评分标准,国考行测的评分标准
  13. 网络工程师(软考)心得
  14. 语音认别---唤醒技术KWS介绍
  15. 第七篇 indicators(3)第三方指标库Ta-lib
  16. 在sae上面运行微信第三方平台微擎,带视频录像
  17. 手把手教你制作docSet文档(用于Dash或zeal)
  18. php activemq实例,php操作ActiveMQ - 小周博客,小周个人博客,程序猿小王子,技术博客,个人博客模板,php博客系统,设计模式,wzyl - 黑夜遮不住光亮...
  19. Elasticsearch文档CURD操作
  20. 信息论基础(包含最大熵模型)

热门文章

  1. 这样出ORACLE的面试题
  2. 移动App开发趋势及未来的展望
  3. [JAVA]寻找满足和的最短子序列(Minimum Size Subarray Sum)
  4. Beaker:一个基于Electron的点对点Web浏览器
  5. 看例子,学 Python(二)
  6. 从零开始写一个武侠冒险游戏-3-地图生成
  7. ubuntu 客户端ssh连接服务器速度缓慢
  8. linux命令之crontab定时执行任务【转】
  9. 0058-简单的阶乘
  10. 《JavaScript 闯关记》之函数