根据这个问题,可以从 jar 文件中加载一个类:
ClassLoader loader = URLClassLoader.newInstance(
new URL[] { jarFileURL },
getClass().getClassLoader()
);
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
如何加载jar 文件中包含的所有类?
根据这个问题,可以从 jar 文件中加载一个类:
ClassLoader loader = URLClassLoader.newInstance(
new URL[] { jarFileURL },
getClass().getClassLoader()
);
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
如何加载jar 文件中包含的所有类?
类加载器将在需要时立即加载 .class 文件。如果不需要,则不会加载。
为什么你认为你的方法会比类加载器已经做的更好?
您必须将其作为 zip 文件打开,检查名称,假设所有以结尾的条目.class
都是类文件并加载它们,忽略嵌套类等。
但为什么?
如果您真的想动态阅读类,请将其留给已经实现该功能的专业人士。实现自己的类加载器很困难。相信我。我已经尝试了几次。改用 OSGi 之类的东西,它为您提供动态类加载等等。