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

Java泛型-ArrayList初始化

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

Java泛型-ArrayList初始化

您不能

List<Number>
为类型的引用分配,
List<Integer>
因为它
List<Number>
允许使用除以外的数字类型
Integer
。如果允许您这样做,则将允许以下操作:

List<Number> numbers = new ArrayList<Number>();numbers.add(1.1); // add a doubleList<Integer> ints = numbers;Integer fail = ints.get(0); // ClassCastException!

该类型

List<Integer>
可以保证它包含的任何内容都是
Integer
。这就是为什么您
Integer
无需铸造就可以退出的原因。如您所见,如果编译器允许将
List
另一种类型的
Number
分配给a
List<Integer>
,则保证将被破坏。

分配

List<Integer>
到例如类型的基准
List<?>
List<? extendsNumber>
是合法的,因为
?
装置(其中的类型是“给定的类型的一些未知的子类型”
Object
中的只是的情况下
?
Number
在的情况下
? extends Number
)。

由于

?
表明您 不知道
List
将接受哪种特定类型的对象,因此只能
null
向其中添加任何内容。但是,允许您从其中 检索
任何对象,这是使用有
? extends X
界通配符类型的目的。请注意,对于有
? super X
界通配符类型而言,情况恰恰相反……a
List<?superInteger>
是“某种未知类型的列表,至少是其超类型
Integer
”。虽然你不知道到底是什么类型
List
是(可能是
List<Integer>
List<Number>
List<Object>
)你肯定知道不管它是什么,一个
Integer
可以被添加到它。

最后,这

new ArrayList<?>()
是不合法的,因为在创建参数化的类(如)的实例时
ArrayList
,您必须提供 特定的
类型参数。您可以在示例中使用任何内容(
Object
Foo
都不要紧),因为您将无法直接添加任何内容
null
,因为您直接将其分配给了
ArrayList<?>
引用。



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

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

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