gpt4 book ai didi

使用自定义类加载器时出现 java.lang.ClassCastException

转载 作者:行者123 更新时间:2023-12-01 09:30:58 24 4
gpt4 key购买 nike

我需要在运行时动态加载一个java类。为此,我使用 https://github.com/trung/InMemoryJavaCompiler .

我需要加载的类实现了一个接口(interface),该接口(interface)已经是我的应用程序的一部分(因此该接口(interface)由系统类加载器加载)。加载类后,我将其强制转换为接口(interface)。

更新:抱歉,我对 docker 的看法是错误的。这当然与 docker 无关,但事实上我是通过命令行启动应用程序的:java -jar ...。当应用程序从 intellij 启动时它就可以工作。当它通过命令行启动时,当我尝试强制转换时会抛出 java.lang.ClassCastException 。

真实接口(interface)的类加载器是org.springframework.boot.loader.LaunchedURLClass Loader@2a84aee7,而动态加载接口(interface)的类加载器是sun.misc.Launcher$AppClassLoader@55f96302。感谢您帮助我找出问题。

我该怎么做才能确保使用相同的类加载器?

始终将自定义类加载器作为接口(interface)类加载器的子加载器是一个好主意吗:new DynamicClassLoader(MyInterface.class.getClassLoader())

最佳答案

是的,DynamicClassLoader需要委托(delegate)给加载MyInterface的ClassLoader。

new DynamicClassLoader(MyInterface.class.getClassLoader()) 应该没问题。

关于使用自定义类加载器时出现 java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406918/

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