![](/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.