ClassLoader--jdk版本引起的ClassCastException

ClassCastException

今天鴿鴿說(shuō),他想學(xué)學(xué)java,我說(shuō)好的好的,快學(xué)快學(xué)(說(shuō)著我打開(kāi)了js,對(duì)于互搶飯碗的行為沒(méi)有絲毫羞澀)。
然后鴿鴿說(shuō):“俺遇到了問(wèn)題!俺按照教程寫(xiě)下來(lái)的,明明!為什么!為什么我就是一個(gè)Exception!”
我說(shuō):“莫急莫急,咱們一步一步分析哈?!?/p>

于是我打開(kāi)了我的vscode(為什么不用idea?為了環(huán)境一致啊~),然后直接把代碼拷貝進(jìn)來(lái),稍微修改了下格式,run!
咦?
貌似是ok的呢。


我的執(zhí)行結(jié)果

然后,我發(fā)現(xiàn)了華點(diǎn)。請(qǐng)仔細(xì)看,我的mainloader是
sun.misc.Launcher$AppClassLoader

而鴿鴿呢?
它是:
jdk.internal.loader.ClassLoader$AppClassLoader
哦,不能相互轉(zhuǎn)換的原因,找到了!

對(duì)于一個(gè)類(lèi),如果類(lèi)加載器不同,那么都是不能劃等號(hào)的。何況是兩個(gè)類(lèi)直接的類(lèi)型轉(zhuǎn)換。

java的類(lèi)加載器因?yàn)橐恢北兄p親委派機(jī)制,所以,對(duì)于java基礎(chǔ)包中的加載器結(jié)構(gòu)限制十分嚴(yán)重。一旦有重大調(diào)整,那么勢(shì)必不同版本之間,因?yàn)轭?lèi)加載器的不同,會(huì)造成很多問(wèn)題。

我稍后便詢(xún)問(wèn)了鴿鴿的jdk版本。不出所料,是大神們先驅(qū)們的標(biāo)配——最新版本——jdk13!
然而jdk9之后,應(yīng)用程序和擴(kuò)展類(lèi)都不再是 java.net.URLClassLoader 的實(shí)例,因此必然失敗。轉(zhuǎn)換版本到1.8就可以解決了。

END。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容