使用泛型和反射时出现不兼容的类型错误

时间:2015-07-15 16:00:44

标签: java generics inheritance reflection types

让: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);

工作得很好吗?

1 个答案:

答案 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