调试 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(在我的例子中是 typeClassinstanceClass)。 class 持有对其 class 加载程序的引用。

就我而言,是 ModuleClassLoader for Module "my.ear" from Service Module LoaderModuleClassLoader for Module "my-web-app.war" from Service Module Loader

如你所见,一个class是从耳朵里传来的,另一个是war。

在web-apppom.xml中将依赖改为provided,应该可以解决问题。

请注意,war 文件将不再 运行 出耳,如果您需要这两种情况,请使用 Maven profile