Java中如何将SomeClass实例转换为Class<? extends SomeClass>类型
错误原因
你混淆了类的实例对象和**类的元数据对象(Class类型)**的概念:
(SubClass1) someClass强制转换后得到的是SubClass1类的实例对象- 你定义的
newChild变量类型是Class<? extends SomeClass>,这是用来存储类的元信息(比如SubClass1.class这种值)的类型,两者类型完全不匹配,所以会报类型不匹配错误。
修复方案
场景1:你实际需要存储子类实例
如果你本来就是要存转换后的子类实例,直接修改newChild的变量类型即可:
SomeClass someClass = getSomeClass(); // 把变量类型改为父类SomeClass即可,子类实例可以直接向上转型赋值 SomeClass newChild; if(someClass.getType() == SubClass1) { newChild = (SubClass1) someClass; } else if(someClass.getType() == SubClass2) { newChild = (SubClass2) someClass; } else if(someClass.getType() == SubClass3) { newChild = (SubClass3) someClass; }
如果后续需要调用子类独有的方法,再针对newChild做类型判断转换即可。
场景2:你确实需要存储类的Class元数据
如果你就是要获取对应子类的Class对象,修改赋值逻辑即可:
SomeClass someClass = getSomeClass(); Class<? extends SomeClass> newChild; if(someClass.getType() == SubClass1) { newChild = SubClass1.class; // 如果你要拿当前实例的运行时Class,也可以直接写 newChild = someClass.getClass(); } else if(someClass.getType() == SubClass2) { newChild = SubClass2.class; } else if(someClass.getType() == SubClass3) { newChild = SubClass3.class; }
如果你的getType()返回的本身就是对应子类的Class对象,甚至可以直接省去所有if判断,一行搞定:
Class<? extends SomeClass> newChild = someClass.getType();
内容的提问来源于stack exchange,提问作者ChgZzzz
相关产品推荐
相关产品推荐

