ClassLoader--jdk版本引起的ClassCastException

ClassCastException

今天鸽鸽说,他想学学java,我说好的好的,快学快学(说着我打开了js,对于互抢饭碗的行为没有丝毫羞涩)。
然后鸽鸽说:“俺遇到了问题!俺按照教程写下来的,明明!为什么!为什么我就是一个Exception!”
我说:“莫急莫急,咱们一步一步分析哈。”

于是我打开了我的vscode(为什么不用idea?为了环境一致啊~),然后直接把代码拷贝进来,稍微修改了下格式,run!
咦?
貌似是ok的呢。


我的执行结果

然后,我发现了华点。请仔细看,我的mainloader是
sun.misc.Launcher$AppClassLoader

而鸽鸽呢?
它是:
jdk.internal.loader.ClassLoader$AppClassLoader
哦,不能相互转换的原因,找到了!

对于一个类,如果类加载器不同,那么都是不能划等号的。何况是两个类直接的类型转换。

java的类加载器因为一直秉行着双亲委派机制,所以,对于java基础包中的加载器结构限制十分严重。一旦有重大调整,那么势必不同版本之间,因为类加载器的不同,会造成很多问题。

我稍后便询问了鸽鸽的jdk版本。不出所料,是大神们先驱们的标配——最新版本——jdk13!
然而jdk9之后,应用程序和扩展类都不再是 java.net.URLClassLoader 的实例,因此必然失败。转换版本到1.8就可以解决了。

END。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容