假设突然看见这个问题。我们常常会想当然。

一个梨子是水果,一筐梨子是一筐水果吗?

程序中,我们较少使用到协变性(covariant)。

一个经典的问题:父类Sup有方法m()。有子类Sub

public class CovariantDemo{public static void main(String[] args) {Sub[] b = new Sub[10];Sup[] p = b;p[0] =  new Sup();b[0].m();}
}

有什么问题?

b是一筐梨子。p是一筐水果,如今你把一个苹果放在了p中。

所以,编译器觉得正确。执行时java.lang.ArrayStoreException: typeSystem.generics.Sup

Java泛型中最令人头痛的是參数化类型的协变性问题。

数组的一个重要性质——协变性(covariant):假设A是B的子类。则A[]是B[]的子类型。

然而对于泛型C<T>,參数化类型C<Object>与C<String>无关。

这违反人们的直观认知

如何说服自己:C<Object>与C<String>无关是合理的。

(1)參数化类型C<梨子>保证当前有一筐梨子。而C<水果>则保证当前有一筐水果,能够向一筐水果中放入苹果、菠萝。假设C<水果>持有C<梨子>引用却不导致编译错误的话,就能够向一筐梨子中放入苹果、菠萝。那么泛型的作用——保证/限定泛型中元素类型的作用将荡然无存。(技术原因:类型參数的擦除)

(2)尽管数组具有协变性,可是在使用时,程序猿要自律地限制元素类型、须要做强制类型转换、或者须要忍受执行时异常而非编译时错误。而这些正是Java泛型要避免的,Java泛型比Java数组使用起来更安全。还有一方面,由于可以方便地使用有限定性的数组如“梨子[]”,数组的协变性不被常常使用。也就不显得讨厌。

(修复例程问题:p[0] =  new Sub(); )

A是B的子类型。參数化类型C<A> 与C<B>无协变性。在某些情况下,却须要參数化类型可以协变,注意,协变指參数化类型之间的协变。为此,Java提供通配符(wildcard)。包含仅仅读通配符“? extends”和仅仅写通配符“?super”。

【5.4.2】

转载于:https://www.cnblogs.com/jzssuanfa/p/6986189.html

一筐梨子amp;一筐水果——协变性(covariant)相关推荐

  1. m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法

    package com.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  2. java编程有一筐鸡蛋_一筐鸡蛋数学题标准答案公式-一筐鸡蛋标准答案图片详细解答版下载_东坡手机下载...

    最近有许多网友被"一筐鸡蛋1个1个拿,9个9个拿正好拿完"这道数学给难住,其实这是一道数学题,小编为你带来一筐鸡蛋一个一个拿正好拿完答案,还有完整解答公式,感兴趣的话就来下载看看吧 ...

  3. 100个python算法超详细讲解:平分7筐鱼

    [100个python算法超详细讲解]@谷哥技术 1.问题描述 2.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时, 他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们 ...

  4. 平分七筐鱼c语言y,C语言平分7筐鱼代码及解析

    原标题:C语言平分7筐鱼代码及解析 问题描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测 ...

  5. 平分七筐鱼c语言y,C语言平分7筐鱼

    问题描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半 ...

  6. C语言每日一练——第60天:平分7筐鱼

    C语言每日一练 2021年11月19日 文章目录 题目描述 分析 代码实现 运行结果 网上参考 题目描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7 ...

  7. 平分7筐鱼---c语言

    问题描述: 甲,乙,丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个 ...

  8. 南师大C:分鱼问题2(7筐鱼)

    前言 循环嵌套以满足条件,和上一个分鱼问题不是一个套路. 正文 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没 ...

  9. 数学一年级应用题_一年级数学下册应用题大全(附带答案)

    应用题可以说是小学数学中最为重要的内容,是培养学生数学思维及解题能力的重要途径,做好应用题掉小学生非常重要,职场达人网精选100道一年级数学下册应用题,并附带答案. 1.原有29个球,借出8个,还剩多 ...

  10. 数学一年级应用题_小学一年级数学下册应用题练习题归纳

    一年级数学应用题是将所学知识应用到实际生活实践的题目,学习啦小编整理了一年级数学下册应用题练习题,希望对你有帮助! 小学一年级数学下册应用题练习题(上) 1.原有29个球,借出8个,还剩多少个? 2. ...

最新文章

  1. C 入门 第八节 指针
  2. opencv图像处理时使用stringstream批量读取图片,处理后并保存
  3. 【需求工程】需求管理
  4. Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)
  5. ubuntu 安装vnc_vnc4server arm架构
  6. 为什么使用php工厂模式,PHP 工厂模式使用方法
  7. 地震(earthquake)
  8. 当不知轴承型号时如何寻找轴承故障频率_知课堂 | 快速计算轴承特征频率
  9. 微信公众号基本配置时token获取失败原因及解决方法
  10. 2018.10.31 NOIP模拟 一串数字(数论+贪心)
  11. MPEG-4、MPEG-4/AVC、H.264之间的联系与区别
  12. python中等好用什么表示_描写中等的词语
  13. pycharm 隐藏或显示文件类型
  14. 暂时性死区(TDZ)
  15. 阿里云大数据ACA考点总结
  16. 《果然新鲜》电商项目(25)- 会员唯一登录
  17. 一起学Python吧~re正则+MySQL
  18. Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组
  19. proc oracle12c,Oracle12cRAC安装遭遇CLSRSC-507: The root script cannot proceed on this node
  20. The Innovation | 粪菌移植治疗肥胖,如何突破瓶颈?

热门文章

  1. 见过世面的程序员,到底有多厉害
  2. 路由器信号分为2.4G和5G,有什么区别?
  3. (五)JMockit的API:@Capturing--基础篇
  4. 读书笔记——《柯维的智慧》格言
  5. 华为软开云4--玩转流水线
  6. TcaplusDB君 · 行业新闻汇编(一)
  7. 天翼云为欧拉社区贡献首个C++热补丁 加速推进联创技术落地应用
  8. 牛逼哄哄的对象深复制
  9. 算法珠玑算法总结(转)
  10. 用Matplotlib绘制渐变的彩色曲线