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