Phi*_*hil 21 java classcastexception
我正在做一个JBoss SEAM项目,当我查看表单时,我收到此错误.
java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav
Run Code Online (Sandbox Code Playgroud)
它总是与屏幕上显示的形式相关的JPA类,它对我来说没有意义,为什么它是同一个类,似乎不可能.
Joa*_*uer 38
当两个不同的ClassLoader对象加载具有相同名称的类时会发生这种情况 Java中两个类的相等性取决于完全限定名称和加载它的类加载器.
因此,如果两个独立的类加载器从同一位置加载类,那么这些类型的对象将无法转换为彼此类型,即使它们的类被调用相同.
正如Joachim先前解释的那样,当两个类加载器加载具有相同名称的类时,通常会发生java.lang.ClassCastException.但是,当发生这种情况时,我遇到了另一种情况.
某些IDE可能会自动重新加载已修改的类.在这种情况下,可能会在内存中保留较旧版本的类,从而导致ClassCastException.
您可以通过以下几种方法解决此问题:
如果您正在编写自定义类加载器,则在加载类时,请确保基类/默认类加载器尚未加载该类的实例.
使类被加载一个已由默认类加载器加载的类的子类.
使正在加载的类实现一个已由默认类加载器加载的接口.
更多信息 - http://www.jspwiki.org/wiki/A2AClassCastException
这是因为该类已由两个不同的类加载器加载.你不能在他们之间施放.
您可能CsiTipoLav在应用程序中获得了副本,并且在不同的类加载器的不同时间加载了两个不同的副本.JBoss在层次结构中有许多不同的类加载器,并且很容易让事情变得复杂.
确保您只有一个班级副本.
| 归档时间: |
|
| 查看次数: |
24398 次 |
| 最近记录: |