通过新实例获得对类的访问权



我使用上面的代码从一个类创建一个新对象:

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方法。它不必是所创建实例的确切类型。创建实例的类实现/扩展的任何接口或超类都可以,只要它们包含该方法。

最新更新