小编qba*_*uak的帖子

<?超级E>和<?扩展E> for List

具有以下简单的类结构:

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是定义的?

java generics

18
推荐指数
1
解决办法
7176
查看次数

标签 统计

generics ×1

java ×1