栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java泛型。通用类型的数组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java泛型。通用类型的数组

《有效的Java》,第5章,GENERICS,第25项:首选列表而不是数组

数组在两个重要方面不同于通用类型。首先,数组是协变的。这个吓人的单词简单地意味着,如果Sub是Super的子类型,则数组类型Sub []是Super
[]的子类型。泛型,相反,是不变的:对于任何两个不同类型

Type1
Type2
List<Type1>
既不是一个亚型,也没有的超
List<Type2>


数组和泛型之间的第二个主要区别是数组是经过整形的[JLS,4.7]。这意味着数组在运行时知道并强制其元素类型。如上所述,如果尝试将String存储到Long数组中,则会得到ArrayStoreException。相反,泛型是通过擦除实现的[JLS,4.6]。这意味着它们仅在编译时强制执行其类型约束,并在运行时丢弃(或擦除)其元素类型信息。擦除是使泛型类型与不使用泛型的旧代码自由互操作的原因(项目23)。由于存在这些根本差异,因此数组和泛型不能很好地混合使用。例如,创建通用类型,参数化类型或类型参数的数组是非法的。这些数组创建表达式均不合法:new
List [],新列表[],新E []。所有这些都会在编译时导致通用数组创建错误。

长话短说:数组和泛型具有某种“相反的”特征,这使得在某些情况下(即使不是不可能)很难将它们混合,因此最好采用Joshua
Bloch的话,并在涉及泛型时使用List而不是数组。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号