Java基本学习:数组--协变性
2016-06-13 10:22
288 查看
今天在看书的时候看到了数组协变性,第一次看到,记录下!
首先是概念 协变性(covariant) :如果类Base是类Sub的父类,那么Base[]就是Sbu[]的父类
Object[] ob = new String[10];
ob[5] = 10;
上面代码运行时是会报错:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
通过资料 了解到Java设计之初,人们想给它做泛型,但是没时间做,所以把数组设计成协变了,这样也导致了无穷的后患。
作对比而言,我们还需要了解泛型是不可变的(invariant)
上面代码编译时就会报错!!
这些表现说明了Java中数组是具体化(reified),而泛型在运行时是被擦除的(erasure)
记录点点滴滴,爱Java,爱生活!
首先是概念 协变性(covariant) :如果类Base是类Sub的父类,那么Base[]就是Sbu[]的父类
Object[] ob = new String[10];
ob[5] = 10;
上面代码运行时是会报错:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
通过资料 了解到Java设计之初,人们想给它做泛型,但是没时间做,所以把数组设计成协变了,这样也导致了无穷的后患。
作对比而言,我们还需要了解泛型是不可变的(invariant)
// List<Object> list = new ArrayList<String>();
上面代码编译时就会报错!!
这些表现说明了Java中数组是具体化(reified),而泛型在运行时是被擦除的(erasure)
记录点点滴滴,爱Java,爱生活!
相关文章推荐
- java中文乱码之解决URL中文乱码问题的方法
- java基本类型的最大最小值以及溢出测试
- 解析Json 出现——java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
- Eclipse添加builder自动执行bat复制脚本
- Java transient关键字
- eclipse 代码格式化
- java反射抄的例子
- eclipse libs 和 buildpath区别
- eclipse 使用Maven deploy命令部署构建到Nexus上
- Struts2学习笔记(9)-Result配置全局结果集
- 如何在eclipse中使用反编译插件
- 《疯狂Java讲义(第3版)》.(李刚)——面向对象(上)
- volatile 变量
- 【Java多线程】同步辅助类CyclicBarrier
- Eclipse Android项目开发完成以后就要将android项目文件打包成apk文件
- Struts2学习笔记(8)-Result常用类型
- Eclipse Egit 安装
- [置顶] Spring Boot实践折腾记汇总
- [LeetCode][12]Integer to Roman解析 int转罗马字符时间复杂度为常数的实现-Java实现
- 解决Eclipse交叉编译环境下出现Symbol"NULL" could not be resolved