Java 如何从变量创建自定义类?(不反对)
我知道我可以做到以下几点:Java 如何从变量创建自定义类?(不反对),java,oop,inheritance,Java,Oop,Inheritance,我知道我可以做到以下几点: String className = "A"; Object o= Class.forName(className).newInstance(); 但考虑这种情况(简化): 现在我想创建一个类,可以是这3种情况中的任何一种。 如果我使用上述代码并创建一个对象,我将无法调用操作方法。 我希望能够创建一个从字符串扩展父对象的对象 在我的实际案例中,我有多个不同的父类,这个类是从一个类扩展而来的,这个类是从一个类扩展而来的,大约有4层固有性。常规强制转换有效吗?由于所有类
String className = "A";
Object o= Class.forName(className).newInstance();
但考虑这种情况(简化):
现在我想创建一个类,可以是这3种情况中的任何一种。 如果我使用上述代码并创建一个对象,我将无法调用操作
方法。
我希望能够创建一个从字符串扩展父对象的对象
在我的实际案例中,我有多个不同的父类,这个类是从一个类扩展而来的,这个类是从一个类扩展而来的,大约有4层固有性。常规强制转换有效吗?由于所有类都扩展了
父类
,因此可以将newInstance()
的结果强制转换到此类型,然后调用父类中声明的所有方法。“正确”的实现将运行
Parent p = (Parent)Class.forName(className).newInstance();
p.action();
铸造可以工作,但没有必要。返回类型为T
的实例,该实例是类的泛型类型。这意味着由于Class.forName(“A”)
返回Class
的实例,您可以将实例声明为A
继承的Parent
,因为newInstance()
返回的是A
类型的对象
Parent p = Class.forName("A").newInstance();
p.action();
您的问题是是否可以执行ao=(A)Class.forName(className).newInstance()代码>?Parent anyClass=(Parent)Class.forName(className).newInstance()代码>?此代码实际上没有编译,表示找到的类型是CAP#1
,需要我执行强制转换,但强制转换有效。
Parent p = Class.forName("A").newInstance();
p.action();