Effective Java之列表由于数组(二十五)
2018-01-06 13:52
253 查看
列表和数组的区别
1.数组是协变的(convariant),如果Sub是Super的子类型,那么数组类型Sub[]就是Super[]的子类型。泛型确实不可变的,List< Sub >不是List< Super >的子类型。
2、数组是具体化的(reified),因此数组在运行时才知道并检查它们的元素类型约束。
泛型则是通过擦除(erasure)来实现,因此泛型只在编译时强化它们的类型信息,并在运行时丢弃(或者擦除)它们的元素类型约束。擦除就是使泛型可以与没有使用泛型的代码随意进行互用。
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>();
总结:对于运行时错误和编译期错误,我们当然选择编译器异常,通常遇到想要创建一个泛型数组的问题是,优先选择List< T >,而不是E< T >。
这样可能会损失一点性能和简洁性,但是换来的是更高的类型安全性和互用性。
相关文章推荐
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java 第三版——28. 列表优于数组
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- Effective Java(列表优先于数组)
- java集合——数组列表(ArrayList)+散列集(HashSet)
- JAVA基础【5.4】《Java核心技术1》继承-泛型数组列表
- java-基础入门-泛型数组列表-解决运行时动态更改数组的问题
- Java源码分析 – ArrayList动态数组列表源码分析
- Java数组与列表转换的java.lang.ClassCastException
- java归并排序(整数数组和list列表)
- java 列表、集合与数组之间的转化