让:B extends A
;
有人可以告诉我为什么这段代码:
List<Class<? extends A>> l = Arrays.asList(B.class);
尝试编译时抛出以下错误:
error: incompatible types: List<Class<B>> cannot be converted to List<Class<? extends A>>
这段代码:
ArrayList<Class<? extends A>> l = new ArrayList<Class<? extends A>>();
l.add(B.class);
工作得很好吗?
答案 0 :(得分:1)
根据documentation,"Can't assign to operator"
方法将其作为相同类型的参数变量,并返回该类型的列表。
Arrays.asList(..)
如果public static <T> List<T> asList(T... a)
与Class<B>
类型绑定,则方法返回类型为T
NOT 按预期类型List<Class<B>>
。因此发生编译错误。
可以通过添加显式转换来修复它,如下所示:
List<Class<? extends A>>
的 EDITED 强>
正如Sotirios所提到的那样 Java 8 已经解决了引入poly expression的繁琐问题,解释了here。