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