我使用上面的代码从类中创建一个新对象:
Object obj = Class.forName("myClass").newInstance()
但出于某种原因,我不能使用var obj来执行方法或从类' myClass'中获取变量,如下所示:
obj.methodFromMyClass();
这一点是从类' myClass'动态创建一个对象。通过另一个班级的参数。
类 A
public A () {
B b = new B("myClass");
}
班级 B
public B ( String className ) {
Object obj = Class.forName( className ).newInstance();
obj.methodFromMyClass();
}
Class myClass
public void methodFromMyClass () {
// Some code
}
因此,B类应该像桥梁一样在指定的类中创建对象。
欢迎每一个提示。
答案 0 :(得分:3)
您需要cast obj
到myClass
,以便编译器知道它是什么类型的对象:
((myClass) obj).methodFromMyClass();
如果要在myClass
上反复使用obj
中的方法,您可能希望将其分配给显式声明该类的新变量:
myClass myObj = (myClass) myObj;
myObj.aMethodFromMyClass();
myObj.anotherMethodFromMyClass();
如果您在编译时不知道obj
的类型,则可能需要使用reflection来呼叫methodFromMyClass
,例如
obj.getClass().getMethod("methodFromMyClass", new Object[0]).invoke(obj);
答案 1 :(得分:1)
您需要将obj
投射到您班级的类型:
myClass obj = (myClass) Class.forName( className ).newInstance();
obj.methodFromMyClass();
由于您的B类构造函数调用方法methodFromMyClass
,因此它必须知道要将obj
转换为哪种类型。该类型必须具有methodFromMyClass
方法。它不必是所创建实例的确切类型。创建的实例的类实现/扩展的任何接口或超类都可以,只要它们包含该方法。