cte*_*ekk 2 java compiler-construction class
我有一个ClassLoader加载JavaCompiler源文件编译的类.但是当我更改源文件,保存并重新编译它时,ClassLoader仍会加载该类的第一个版本.
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Class<?> compiledClass = cl.loadClass(stringClass);
Run Code Online (Sandbox Code Playgroud)
我错过了什么?喜欢newInstance还是什么?
And*_*s_D 11
类加载器不能替换已加载的类.loadClass将返回现有Class实例的引用.
您必须实例化一个新的类加载器并使用它来加载新类.然后,如果你想"替换"这个类,你将不得不抛弃这个类加载器并创建另一个新类.
回应你的评论:做类似的事情
ClassLoader cl = new UrlClassLoader(new URL[]{pathToClassAsUrl});
Class<?> compiledClass = cl.loadClass(stringClass);
Run Code Online (Sandbox Code Playgroud)
这个类加载器将使用"默认委托父类ClassLoader",你必须小心,该类(由它完全限定的类名称标识)尚未加载,并且不能由该父类加载器加载.所以"pathToClassAsUrl"不应该在类路径上!