java - 是否可以动态加载一个类并将其用作类型?

标签 java classloader instantiation

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

相关文章:

java - 如何删除按钮单击 JavaFX 的展开效果?

java - 渲染后,Android获取webview内容的高度

java - 谁首先在类加载过程中创建了 Class<?> 对象?

Java ClassLoader - 将动态加载的 jar 添加到系统类加载器

python - 请帮助我理解 python 对象实例化。

java - liferay 7.2 中的 Spring Autowiring 注释

java - 你如何列出在 jvm 中内化的字符串?

websphere - Websphere 中的加载约束违规

java - Java 中非实例化类的内存管理是如何工作的?

swift - 在 Swift 5.0 中从 AppDelegate 实例化窗口失败