您的位置:首页 > Web前端

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 >。

这样可能会损失一点性能和简洁性,但是换来的是更高的类型安全性和互用性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  列表优于数组