List<Object>、List<?>、List、List<?extends>、List<?super>

题目源自 牛客

classA{}
class B extends A{}
class C extends A{}
class D extedns B{}

which is true --答案 ACD
A:The type LIst<A> is assignable to List √ //List 相当于 List<?>范围比List<A>大
B:The type List<B> is assignable to List<A> × //两个点之间不能赋值,除非是相同的两个点
C: The type List<Object> is assignable to List<?> √//List<?>是最大范围, 而List<Object>只是其中的一个点,在最大范围内
D: The type List<D> is assignable to List<?extendsB> √//D是B的子类,所以D的范围比B小 

如果尖括号里是一个类,例如 List<A>, List<B>, List<C>,List<Object>就是普通的泛型
如果尖括号里是<?extends >,例如 List<? extends A>代表小于等于A的范围(extends 继承,extends A 继承自A,就是范围小于等于A)
如果尖括号里是<? super>,例如List<? Super A> 代表范围大于等于A
如果尖括号里是<?> 则代表全部范围
List<?> 和 List 范围相同
尖括号里,所有点赋值都是错的,除非两个点相同eg: List<A> = List<B>,将B赋值给A是错的, 但是 List<? extends A> = List<B> 是对的
尖括号里,小范围赋值给大范围 ,对
尖括号里,大范围赋值给小范围,错
尖括号里,相同的点可以互相赋值

原文地址:https://www.cnblogs.com/coisini/p/10964876.html