![](/img/trans.png)
[英]java.lang.ClassCastException when casting to the same class - ClassLoader issues
[英]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.