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”不应该在类路径上!

https://stackoverflow.com/questions/9804601/java-classloader-load-same-class-twice

转载注明原文:Java ClassLoader:两次加载相同的类