Java,从JAR加载类以便以后使用它们

时间:2018-05-19 13:05:58

标签: java reflection load

我在从JAR文件加载类时遇到问题。

我可以使用JarFile等等来加载URLClassLoader like in this answer;但如果稍后在代码中我尝试用反射实例化它们:

Object obj = Class.forName(className).newInstance()

我得到一个ClassNotFoundException。 当我需要它时,我可以在后面加载一个类来使用它们,就像ClassPath中的类一样吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要为Class.forName方法提供类加载器-否则它将在您的类所在的同一个类加载器中查找。
Object obj = Class.forName("name", true, loader).newInstance()

但是您不能只加载一个类然后在像MyLoadedType这样的代码中使用它-因为在这里Java不知道在哪里寻找该类,除非您将确保代码和加载的代码是在同一个类加载器中-您可以通过运行自定义类加载器中的所有代码来实现此目的,该代码允许在运行时添加新源。 (URLClassLoader允许这样做,但是方法是受保护的-因此您需要对其进行扩展并使其公开,在Java 8系统类加载器中,它也是URLClassLoader-但在Java 9中已更改)。

但是您可以像我向您展示的那样使用反射来处理该代码。