调试 ClassCastException
Debug ClassCastException
我运行变成了ClassCastException
:
Cannot cast my.package.classA to my.package.classA.
请注意(规范)class(名称)相同。
我理解这应该与不同的 class 加载器 and/or 从不同的 jar 加载 class 有关。
该项目是使用 Maven 构建的。
我能以某种方式调试在每种情况下使用了哪个 classloader 以及从哪个 jar 加载了 classes 吗?
为 ClassCastException
添加断点。
对于 IntelliJ,这看起来像这样:
捕获到异常后,在调试器调用层次结构中导航,直到找到应该发生强制转换的行并且您有两个 classes.
的引用
例如:
现在,您可以检查两个 classes(在我的例子中是 typeClass
和 instanceClass
)。 class 持有对其 class 加载程序的引用。
就我而言,是 ModuleClassLoader for Module "my.ear" from Service Module Loader
和
ModuleClassLoader for Module "my-web-app.war" from Service Module Loader
如你所见,一个class是从耳朵里传来的,另一个是war。
在web-apppom.xml
中将依赖改为provided
,应该可以解决问题。
请注意,war 文件将不再 运行 出耳,如果您需要这两种情况,请使用 Maven profile。
我运行变成了ClassCastException
:
Cannot cast my.package.classA to my.package.classA.
请注意(规范)class(名称)相同。
我理解这应该与不同的 class 加载器 and/or 从不同的 jar 加载 class 有关。 该项目是使用 Maven 构建的。 我能以某种方式调试在每种情况下使用了哪个 classloader 以及从哪个 jar 加载了 classes 吗?
为 ClassCastException
添加断点。
对于 IntelliJ,这看起来像这样:
捕获到异常后,在调试器调用层次结构中导航,直到找到应该发生强制转换的行并且您有两个 classes.
的引用例如:
现在,您可以检查两个 classes(在我的例子中是 typeClass
和 instanceClass
)。 class 持有对其 class 加载程序的引用。
就我而言,是 ModuleClassLoader for Module "my.ear" from Service Module Loader
和
ModuleClassLoader for Module "my-web-app.war" from Service Module Loader
如你所见,一个class是从耳朵里传来的,另一个是war。
在web-apppom.xml
中将依赖改为provided
,应该可以解决问题。
请注意,war 文件将不再 运行 出耳,如果您需要这两种情况,请使用 Maven profile。