【发布时间】:2014-03-08 13:06:21
【问题描述】:
我尝试理解 java 中的泛型行为
我写了同样的代码:
共同部分:
class A1{}
class B1 extends A1{}
class C1 extends B1{}
案例一:
List<? extends B1> list = new ArrayList<C1>();
list.add(new A1());// compile error
list.add(new B1());//compile error
list.add(new C1());//compile error
案例2:
List<? super B1> list = new ArrayList<A1>();
list.add(new A1());//compile error
list.add(new B1());//valid
list.add(new C1());//valid
我认为我编写了简单的代码。为什么我看到非对称结果?
【问题讨论】:
-
其中哪些结果让您感到惊讶,为什么?
-
我认为 super 和 extends 是对称的
-
你明白它们的意思吗?如果没有,你为什么不问呢?如果你这样做了,那么你会惊讶于什么结果?
-
@JB Nizet 列表 extends B1> list - 我不能通过这个引用添加任何东西,但是当我使用 List列表
-
在我遇到这段代码后,我明白我对泛型的理解有误
标签: java generics inheritance wildcard