java 泛型 arraylist_Java泛型 – ArrayList初始化

您不能分配列表< Number>到List< Integer>类型的引用因为List< Number>允许除Integer之外的数字类型.如果您被允许这样做,则允许以下内容:

List numbers = new ArrayList();

numbers.add(1.1); // add a double

List ints = numbers;

Integer fail = ints.get(0); // ClassCastException!

类型List< Integer>正在保证它包含的任何内容将是一个整数.这就是为什么你被允许从其中获得一个整数,而不是投射.如您所见,如果编译器允许将另一类型的列表(例如Number)分配给List< Integer>那个保证会被打破.

分配列表引用一个类型,例如List或列表扩展号>是合法的吗?意思是“给定类型的某些未知子类型”(在“?”的情况下,类型为“Object”,“Number”).

既然?表示您不知道List将接受什么特定类型的对象,添加任何东西但不为null是合法的.但是,您是否允许从其中检索任何对象,这是使用的目的?扩展X有界通配符类型.请注意,相反的是一个?超X有界通配符类型…一个列表超级整数>是“至少是整型的超类型的一些未知类型的列表”.虽然您不知道确切地知道什么类型的列表(可以是List< Integer>,List< Number>,List< Object>),但您可以确定,无论它是什么,都可以添加一个整数.

最后,新的ArrayList()不合法,因为当您创建像ArrayList这样的参数化类的实例时,必须给出一个特定的类型参数.你可以真正使用你的例子中的任何东西(Object,Foo,没关系),因为你直接将它分配给一个ArrayList参考.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值