Java 调试类CastException
我遇到一个Java 调试类CastException,java,classloader,Java,Classloader,我遇到一个ClassCastException: 无法将my.package.classA强制转换为my.package.classA。 请注意,(规范)类(名称)是相同的 我理解这应该与不同的类装入器和/或从不同的jar装入类有关。 该项目是使用Maven构建的。 我是否可以调试每种情况下使用的类加载器以及从哪个jar加载的类?为ClassCastException添加断点。 对于IntelliJ,这看起来像这样: 捕捉到异常后,在调试器调用层次结构中导航,直到找到应执行强制转换的行,并且有
ClassCastException
:
无法将my.package.classA强制转换为my.package.classA。
请注意,(规范)类(名称)是相同的
我理解这应该与不同的类装入器和/或从不同的jar装入类有关。
该项目是使用Maven构建的。
我是否可以调试每种情况下使用的类加载器以及从哪个jar加载的类?为
ClassCastException
添加断点。
对于IntelliJ,这看起来像这样:
捕捉到异常后,在调试器调用层次结构中导航,直到找到应执行强制转换的行,并且有对这两个类的引用
例如:
现在,您可以检查这两个类(在我的例子中是typeClass
和instanceClass
)。该类持有对其类装入器的引用
在我的例子中,它是服务模块加载器中模块“my.ear”的modulelassloader
和
Service Module Loader中模块“my web app.war”的模块ClassLoader
正如你所看到的,一类来自耳朵,另一类来自战争
将依赖项更改为web应用程序pom.xml
中提供的,这将解决问题。
请注意,war文件将不再在ear之外运行,如果两种情况都需要,请使用