java—您不能示例化类吗?如果没有,如何实现?

qvtsj1bj  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(252)

为了避免xy的问题,我想要的是:

Class<?> clazz= Class.forName("XXXXX"); // If I'm super sure this type is MyClass

if ( clazz instanceOf MyClass.class ) {

}

// Or

switch (clazz){

case MyClass1.class:{ }
case MyClass2.class:{ }

没有一个是对的,我尝试这样做:

List<MyClass1> list;

Class<?> superclass = clazz.getSuperclass();
if (superclass == MyClass1.class) {
    list.add(clazz);  // This is wrong with error
    list.add((MyClass1) clazz); // This is working but IDE warning 
}

有没有什么简单的方法来示例化一个类?因为instanceof之后的cast是安全的。

if ( obejct instanceOf People){
    (People) object;
}
8ljdwjyq

8ljdwjyq1#

我想你把一些事实弄混了。 MyClass instance = ... 是一个例子 MyClass 你可以用威奇 instanceof 你可以把它添加到 List<MyClass> . Class<?> clazz = ... 也是的示例,但不是的示例 MyClass 而是类的一个示例 Class (哪一个是最终的)那么 clazz instanceof MyClass 永远不会回到现实。因为它不是一个 MyClass 你应该得到一份工作 ClassCastException 在运行时,如果您尝试强制转换 clazzMyClass .
所以要检查 Class 示例 clazz 你应该使用 Class#isAssignableFrom ```
Class<?> clazz= Class.forName("XXXXX");
if (MyClass.class.isAssignableFrom(clazz)) {
...
}

相关问题