获取两个类完全相同的类强制转换异常

2022-09-01 16:50:53

我正在做一个JBoss SEAM项目,当我查看表单时,我得到这个错误。

java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav

它总是与屏幕上显示的形式相关的相同JPA类,这对我来说没有意义,为什么它是同一个类,这似乎是不可能的。


答案 1

当两个不同的对象装入具有相同名称的类时,会发生这种情况。Java 中两个类的相等性取决于完全限定名装入它的类装入器。ClassLoader

因此,如果两个独立的类装入器从同一位置装入类,则这些类型的对象将无法强制转换为其他类型,即使它们的类调用相同。


答案 2

正如Joachim之前解释的那样,java.lang.ClassCastException通常发生在两个类装入器加载具有相同名称的类时。但是,当这种情况可能发生时,我遇到了另一种情况。

对于某些自动重新加载已修改的类的 IDE,可能会发生这种情况。在这种情况下,内存中可能保留了该类的旧版本,从而导致 ClassCastException。

以下是解决此问题的几种方法:

  1. 如果您正在编写定制类装入器,那么在装入类时,请确保基类/缺省类装入器尚未装入该类的实例。

  2. 使要装入的类成为缺省类装入器已装入的类的子类。

  3. 使要装入的类实现已由缺省类装入器装入的接口。

更多信息在这里 - http://www.jspwiki.org/wiki/A2AClassCastException


推荐