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