可能重复:
java泛型超级关键字
我无法将我的知识与以下示例程序联系起来。请参阅下面的示例程序,然后我的疑问在该程序下方。
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
or的列表B
,输出是一样的!
请解开我的疑惑。