第25条 泛型——列表优先于数组
2016-05-05 14:08
267 查看
数组与泛型相比有两个重要的不同点。
首先,数组是协变的。相反泛型则是不可变的。
//这是被允许的
Object[] objectArray = new Long[1];
objectArray[0] = "hello world";//Throws java.lang.ArrayStoreException
//Won't compile! 不被允许:Type mismatch: cannot convert from LinkedList<Long> to List<Object>
List<Object> list = new LinkedList<Long>();
其次,数组是具体化的(reified)。因此数组会在运行时才知道并检查他们的元素类型约束。泛型是通过擦除来实现的。因此泛型只在编译时强化他们的类型信息,并在运行时丢弃(或者擦除)他们元素的类型信息。
创建泛型数组是非法的:
首先,数组是协变的。相反泛型则是不可变的。
//这是被允许的
Object[] objectArray = new Long[1];
objectArray[0] = "hello world";//Throws java.lang.ArrayStoreException
//Won't compile! 不被允许:Type mismatch: cannot convert from LinkedList<Long> to List<Object>
List<Object> list = new LinkedList<Long>();
其次,数组是具体化的(reified)。因此数组会在运行时才知道并检查他们的元素类型约束。泛型是通过擦除来实现的。因此泛型只在编译时强化他们的类型信息,并在运行时丢弃(或者擦除)他们元素的类型信息。
创建泛型数组是非法的:
//Cannot create a generic array ofList<String> List<String>[] stringLists = newList<String>[1];一般来说,数组和泛型不能很好的混合使用。
相关文章推荐
- iOS开发-图片高斯模糊效果
- mysql 导出数据库部分字段或部分数据
- selenium元素总结
- 项目需要简单些了个WEB APP 的弹出窗
- 面向对象从接触到入门
- 图片加载库Fresco
- linux 下操作Mysql系列文章一
- dubbo与zookeeper搭建类soa服务
- md5加密 控制台传入与web传入参数 md5加密结果不同
- Spark生态之Alluxio学习3---机器重启后数据存储位置的变化
- 百度董事长李彦宏:决定成功的基本要素是什么?
- 绝对定位 与 z-index
- 挂断电话
- 解析js面试题(上)
- MVC开发模式及其形成过程
- HTML列表
- python代码结构
- Android json数据解析
- 将 ASCII 码表示的十进制数转换为二进制数
- Java 日期加减计算.