继承与清单

时间:2011-05-22 08:54:17

标签: java generics covariance

Class B extends class A。我有一个B列表(List<B> list1),但对于某些操作,我只需要A类字段,但List<A> list2 = list1不起作用。如何解决这个问题?

2 个答案:

答案 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)

泛型是严格类型的,它们不支持像数组这样的共变类型。