我正在尝试编写代码来动态加载类,并使用它创建新实例并运行强制转换。我可以使用以下方法从新加载的类中创建一个实例: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/

10-09 05:17