请看下列代码:
class B extends A {}
class C extends A {}
class D extends B {}
下列说法正确的是:
A. List<A>类型可以转换为List类型
B. List<B>类型可以转换为List<A>类型
C. List<D> 类型可以转换为 List<? extends B>.
D. List<? extends A>类型可以转换为 List<A>.
哪个答案是正确的? 为什么
求大神详细解答,感激不尽!!
------解决思路----------------------
AC 正确
A 中,将带有泛型的list可以转换为擦掉泛型的list
B 泛型不具有斜变性,所以
List<Object> objs = new ArrayList<Long>();
是错误的,同理,List<B>类型不可以转换为List<A>类型
C <? extends Object> 表示泛型是 Object 或者是 Object 的子类型,D 是B的子类型,所以List<D> 类型可以转换为 List<? extends B>