gpt4 book ai didi

Java类加载器: load same class twice

转载 作者:行者123 更新时间:2023-12-02 13:24:57 25 4
gpt4 key购买 nike

我有一个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);

该类加载器将使用“默认委托(delegate)父类加载器”,您必须小心,该类(由其完全限定类名标识)尚未加载,并且无法由该父类加载器加载。所以“pathToClassAsUrl”不应该在类路径上!

关于Java类加载器: load same class twice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com