我知道我可以做到以下几点:
String className = "A";
Object o= Class.forName(className).newInstance();
但是考虑这种情况(简化):
class Parent {
public void action() {...};
}
class A extends Parent {
@Override
public void action() {...};
}
class B extends Parent {
@Override
public void action() {...};
}
class C extends Parent {
@Override
public void action() {...};
}
现在,我想创建一个可以是这三种情况之一的类。如果使用上面的代码并创建一个Object,则将无法调用该action
方法。我希望能够创建一个从字符串扩展Parent的对象。
在我的实际情况中,我有多个不同的父母,并且这个班级是从一个班级扩展而来的,该班级是从一个班级和大约4层继承力扩展而来的。会定期进行铸造工作吗?
强制转换是可以的,但不是必须的。Class#newInstance()
返回type的实例T
,该实例是类的泛型类型。这意味着,由于Class.forName("A")
返回的实例Class<A>
,因此您可以将实例声明为Parent
归因于A
的继承,就像newInstance()
返回类型为object一样A
。
Parent p = Class.forName("A").newInstance();
p.action();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句