如何将Class <?>强制转换为Class <?延伸X>?

时间:2019-11-15 16:07:23

标签: java casting

我有一个保存为A的类Class<?>,我知道它是B的子类,因此必须将其转换为Class<? extends B>。但是我的代码无法编译:

Class<?> c = ...
if (c.newInstance() instanceof B) { // true
    Class<? extends B> = (B) c; // does not compile
}

在研究期间,我发现了有关通配符捕获的信息,但是我不知道如何使用此方法,因为B是abstract类。 那么我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:3)

java.lang.Class有一种方法可以做到这一点:asSubclass(Class)

这样,您可以将上面的代码编写为:

if (c.isAssignableFrom​(B.class)) {
    Class<? extends B> b = c.asSubclass(B.class);
}

答案 1 :(得分:2)

只需强制转换为 right 类型:

Class<? extends B> b = (Class<? extends B>) c; 

首先,左侧的类型为Class<? extends B>,而在转换中使用的类型为B某些扩展B 的类与 B 不同。 B类 B 不相同。

然后:还有一个语法错误,因为您也省略了变量名。