如何将通用子类型列表转换为特定子类型列表?

时间:2018-10-18 08:51:25

标签: java list generics wildcard subtype

假设类cert_object_id扩展了类B,我们有

A

是否可以在不遍历所有元素的情况下将List<? extends A> list1; List<B> list2; 分配给list1

2 个答案:

答案 0 :(得分:1)

List<B> list2 = (List<B>)list1;

ClassCastExceptions获取Elements时,您将不得不处理编译器警告,可能还要处理list2

答案 1 :(得分:0)

简单地说,不。

原因是编译器没有任何证据证明list1元素的运行时类型将为B(或B的任何子类型)。它们的类型可能为C extends A,可能会在运行时导致ClassCastException

但是,您始终可以通过强制转换遍历list1并将所有元素添加到list2(当然,只有在您确信类型兼容的情况下)。即使可以使用,但这也表明设计不好。