【发布时间】:2013-01-02 19:38:41
【问题描述】:
我无法将我的知识与以下示例程序联系起来。请参阅下面的示例程序,然后我的疑问就在该程序下方。
import java.util.*;
class A { }
class B extends A { }
class C extends B { }
public class sampleprog {
public static void main(String[] args) {
List<? super A> list1 = new ArrayList<A>();
list1.add(new A());//valid. ok
list1.add(new B());//valid, why? it is not super to A?
list1.add(new C());//valid, why? it is not super to A?
List<? super B> list2 = new ArrayList<A>();
list2.add(new A());//not valid. why? it is also super to B!!!
list2.add(new B());
list2.add(new C());
List<? super C> list3 = new ArrayList<C>();
list3.add(new A());//not valid, why? It is super to A so should be valid!!!
list3.add(new B());//not valid, why? It is super to A so should be valid!!!
list3.add(new C());
}
}
我的疑惑:
- 据我所知? super T 表示您可以添加的任何类都超级到T 但这里的输出不同?甚至子类也成功添加,这完全令人困惑。
- 输出与列表初始化 (List<? super C> list3 = new ArrayList<C>();) 没有什么不同。在这个初始化中,我分配了A或B的列表,输出是一样的!
请消除我的疑虑。
【问题讨论】: