具有以下简单的类结构:
class A {
}
class B extends A {
}
class C extends B {
}
Run Code Online (Sandbox Code Playgroud)
我正在创建一个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>();
Run Code Online (Sandbox Code Playgroud)
对于每个列表,我正在尝试添加每个先前创建的类的1个对象:A,B,C.唯一可能的组合是:
将类A,B,C的对象添加到list4
将类B和C的对象添加到list5
将类C的对象添加到列表list6.其余的尝试给出了编译器错误,例如:
类型List中的方法add(capture#1-of?extends A)不适用于参数(A)
为什么我不能将类A,B,C的任何对象添加到list1/2/3?为什么例如list4接受类A,B,C的对象,如果它们应该是A类的超类,因为list4是定义的?