繁体   English   中英

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

[英]java.lang.ClassCastException when using custom classloader

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

我需要加载的类实现了已经属于我的应用程序的接口(因此,该接口由system-classloader加载)。 加载类后,将其强制转换为接口。

更新 :对不起,但是我对码头工人是错的。 当然,这与docker无关,但是我通过命令行启动应用程序: java -jar ... 当从intellij启动应用程序时,它将起作用。 通过命令行启动时,尝试投射时会抛出java.lang.ClassCastException。

实际接口的类加载器是org.springframework.boot.loader.LaunchedURLClass Loader @ 2a84aee7,而动态加载的接口的类加载器是sun.misc.Launcher$AppClassLoader@55f96302。 感谢您帮助我确定问题所在。

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

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

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

new DynamicClassLoader(MyInterface.class.getClassLoader())应该可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM