<?超级E>和<?扩展列表的 E>
具有以下简单的类结构:
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>();
对于每个列表,我尝试为每个早期创建的类添加1个对象:A,B,C。唯一可能的组合是:
将类 A、B、C 的对象添加到列表 4
将 B 类和 C 类的对象添加到列表5
将类 C 的对象添加到列表列表 6。其余的尝试给出了编译器错误,例如我们:
类型 List 中的方法 add(capture#1-of ? extends A) 不适用于参数 (A)
为什么我不能将任何 A、B、C 类的对象添加到 list1/2/3?例如,为什么 list4 接受类 A、B、C 的对象,如果它们应该是类 A 的超类,正如 list4 所定义的那样?