Class B extends class A
。我有一个B列表(List<B> list1)
,但对于某些操作,我只需要A类字段,但List<A> list2 = list1
不起作用。如何解决这个问题?
答案 0 :(得分:4)
List<? extends A> list2 = list1;
这意味着“A
的特定子类型列表”。
如果你可以使用List<A>
,这意味着“一个A及其所有子类的列表”,你将失去编译时的安全性。想象:
List<B> list1 = ..;
List<A> list2 = list1;
list2.add(new C());
for (B b : list1) {
//ClassCastException - cannot cast from C to B
}
答案 1 :(得分:3)
泛型是严格类型的,它们不支持像数组这样的共变类型。