Java ClassLoader:两次加载相同的类

我有一个ClassLoader加载JavaCompiler从源文件编译的类。但是,当我更改源文件,保存并重新编译它时,ClassLoader仍然会加载该类的第一个版本。

   ClassLoader cl = Thread.currentThread().getContextClassLoader();

Class<?> compiledClass = cl.loadClass(stringClass);

我想念什么?像newInstance之类的东西?

回答:

类加载器不能替换已经加载的类。loadClass将返回现有Class实例的引用。

您必须实例化一个新的类加载器,并使用它来加载新类。然后,如果要“替换”该类,则必须扔掉该类加载器并创建另一个新的类加载器。


针对您的评论:做类似的事情

ClassLoader cl = new UrlClassLoader(new URL[]{pathToClassAsUrl});

Class<?> compiledClass = cl.loadClass(stringClass);

该类加载器将使用“默认委托父类ClassLoader”,并且您必须注意,该类(由其完全限定的类名标识)尚未加载,并且不能由该父类加载器加载。因此,“

pathToClassAsUrl”不应放在类路径上!

以上是 Java ClassLoader:两次加载相同的类 的全部内容, 来源链接: utcz.com/qa/428763.html

回到顶部