簡體   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