我有一个保存为A
的类Class<?>
,我知道它是B的子类,因此必须将其转换为Class<? extends B>
。但是我的代码无法编译:
Class<?> c = ...
if (c.newInstance() instanceof B) { // true
Class<? extends B> = (B) c; // does not compile
}
在研究期间,我发现了有关通配符捕获的信息,但是我不知道如何使用此方法,因为B是abstract
类。
那么我该如何解决这个问题呢?
答案 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 不相同。
然后:还有一个语法错误,因为您也省略了变量名。