假设类cert_object_id
扩展了类B
,我们有
A
是否可以在不遍历所有元素的情况下将List<? extends A> list1;
List<B> list2;
分配给list1
?
答案 0 :(得分:1)
List<B> list2 = (List<B>)list1
;
从ClassCastExceptions
获取Elements时,您将不得不处理编译器警告,可能还要处理list2
。
答案 1 :(得分:0)
简单地说,不。
原因是编译器没有任何证据证明list1
元素的运行时类型将为B
(或B
的任何子类型)。它们的类型可能为C extends A
,可能会在运行时导致ClassCastException
。
但是,您始终可以通过强制转换遍历list1
并将所有元素添加到list2
(当然,只有在您确信类型兼容的情况下)。即使可以使用,但这也表明设计不好。