【问题标题】:Debug ClassCastException调试 ClassCastException
【发布时间】:2020-09-30 08:32:48
【问题描述】:

我遇到了ClassCastException

Cannot cast my.package.classA to my.package.classA.

请注意,(规范)类(名称)是相同的。

我知道这应该与不同的类加载器和/或从不同的 jar 加载类有关。 该项目是使用 Maven 构建的。 我能否以某种方式调试每种情况下使用了哪个类加载器以及从哪个 jar 中加载了这些类?

【问题讨论】:

    标签: java classloader


    【解决方案1】:

    ClassCastException 添加断点。 对于 IntelliJ,这看起来像这样:

    一旦捕获到异常,在调试器调用层次结构中导航,直到找到应该发生强制转换的行并且您对这两个类都有引用。

    例如:

    现在,您可以检查这两个类(在我的例子中是 typeClassinstanceClass)。该类包含对其类加载器的引用。

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

    如您所见,一类来自耳朵,另一类来自战争。

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多