以下是一个简单的类结构:
class A {
}
class B extends A {
}
class C extends B {
}
我正在创建一个ArrayList来保存之前创建的类的对象:List<? extends A> list1 = new ArrayList<A>();
List<? extends B> list2 = new ArrayList<B>();
List<? extends C> list3 = new ArrayList<C>();
List<? super A> list4 = new ArrayList<A>();
List<? super B> list5 = new ArrayList<B>();
List<? super C> list6 = new ArrayList<C>();
我想向每个列表中添加一个之前创建的类A、B和C的对象,唯一可能的组合是:
添加类A、B、C的对象到list4
添加类B和C的对象到list5
将类C的对象添加到list6。 尝试其他方法会导致编译器错误,例如:
List中的add(capture#1-of?extends A)方法不适用于参数(A)
为什么无法向list1/2/3添加A、B、C类的任何对象? 例如,如果它们被定义为A类的超类,为什么list4接受A、B、C类的对象?