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