一筐梨子amp;一筐水果——协变性(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)相关推荐
- m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
package com.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- java编程有一筐鸡蛋_一筐鸡蛋数学题标准答案公式-一筐鸡蛋标准答案图片详细解答版下载_东坡手机下载...
最近有许多网友被"一筐鸡蛋1个1个拿,9个9个拿正好拿完"这道数学给难住,其实这是一道数学题,小编为你带来一筐鸡蛋一个一个拿正好拿完答案,还有完整解答公式,感兴趣的话就来下载看看吧 ...
- 100个python算法超详细讲解:平分7筐鱼
[100个python算法超详细讲解]@谷哥技术 1.问题描述 2.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时, 他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们 ...
- 平分七筐鱼c语言y,C语言平分7筐鱼代码及解析
原标题:C语言平分7筐鱼代码及解析 问题描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测 ...
- 平分七筐鱼c语言y,C语言平分7筐鱼
问题描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半 ...
- C语言每日一练——第60天:平分7筐鱼
C语言每日一练 2021年11月19日 文章目录 题目描述 分析 代码实现 运行结果 网上参考 题目描述 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7 ...
- 平分7筐鱼---c语言
问题描述: 甲,乙,丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个 ...
- 南师大C:分鱼问题2(7筐鱼)
前言 循环嵌套以满足条件,和上一个分鱼问题不是一个套路. 正文 甲.乙.丙三位渔夫出海打鱼,他们随船带了21只箩筐.当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐则是空的,由于他们没 ...
- 数学一年级应用题_一年级数学下册应用题大全(附带答案)
应用题可以说是小学数学中最为重要的内容,是培养学生数学思维及解题能力的重要途径,做好应用题掉小学生非常重要,职场达人网精选100道一年级数学下册应用题,并附带答案. 1.原有29个球,借出8个,还剩多 ...
- 数学一年级应用题_小学一年级数学下册应用题练习题归纳
一年级数学应用题是将所学知识应用到实际生活实践的题目,学习啦小编整理了一年级数学下册应用题练习题,希望对你有帮助! 小学一年级数学下册应用题练习题(上) 1.原有29个球,借出8个,还剩多少个? 2. ...
最新文章
- C 入门 第八节 指针
- opencv图像处理时使用stringstream批量读取图片,处理后并保存
- 【需求工程】需求管理
- Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)
- ubuntu 安装vnc_vnc4server arm架构
- 为什么使用php工厂模式,PHP 工厂模式使用方法
- 地震(earthquake)
- 当不知轴承型号时如何寻找轴承故障频率_知课堂 | 快速计算轴承特征频率
- 微信公众号基本配置时token获取失败原因及解决方法
- 2018.10.31 NOIP模拟 一串数字(数论+贪心)
- MPEG-4、MPEG-4/AVC、H.264之间的联系与区别
- python中等好用什么表示_描写中等的词语
- pycharm 隐藏或显示文件类型
- 暂时性死区(TDZ)
- 阿里云大数据ACA考点总结
- 《果然新鲜》电商项目(25)- 会员唯一登录
- 一起学Python吧~re正则+MySQL
- Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组
- proc oracle12c,Oracle12cRAC安装遭遇CLSRSC-507: The root script cannot proceed on this node
- The Innovation | 粪菌移植治疗肥胖,如何突破瓶颈?