不兼容类型在使用泛型和反射时出错



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

工作得很好?

根据文档,Arrays.asList(..)方法将相同类型的参数变量作为其参数变量,并返回该类型的列表。

public static <T> List<T> asList(T... a)

如果Class<B>绑定到类型T,则方法返回类型为List<Class<B>>,即而不是类型List<Class<? extends A>>。这样就会出现编译错误。

可以通过添加显式强制转换来修复,如下所示:

List<Class<? extends A>> l = Arrays.<Class<? extends A>>asList(B.class);



正如Sotirios 所提到的,Java 8通过引入这里解释的多表达式解决了这个繁琐的问题。

相关内容

  • 没有找到相关文章

最新更新