我正在尝试编写代码来动态加载类,并使用它创建新实例并运行强制转换。我可以使用以下方法从新加载的类中创建一个实例:myClass.newInstance();
。但是我不能将其用作类型。例如:myClass myObj = new myClass();
它不起作用。有可能以某种方式执行吗?
这是我试图制作的代码:
URL classUrl;
classUrl = new URL("file:///C:/classes/");
URL[] classUrls = { classUrl };
URLClassLoader ucl = new URLClassLoader(classUrls);
Class c = ucl.loadClass("Operation");
Class MyIn = ucl.loadClass("MyInter");
Object o = c.newInstance(); //IT WORKS
System.out.println(((MyIn) o).sum(2, 4)); //IT DOES NOT WORK. Message: MyIn cannot be resolved to a type
最佳答案
由于您在编译时不了解MyIn,因此,不仅需要像使用实例那样使用反射实例化类,还需要使用调用方法。
类似于以下内容:
MyIn.getDeclaredMethod("sum",Integer.TYPE,Integer.TYPE).invoke(o,2,4);
参见例如https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html
关于java - 是否可以动态加载类并将其用作类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36358832/