ClassCastException问题

时间:2011-04-18 14:50:33

标签: java casting classcastexception

我有以下代码:

Object backingBean = facesContextHandler.getBackingBean("UserCredentialsBean");
UserCredentialsBean userCredentBean = (UserCredentialsBean) backingBean;

在我调试它时,我在Eclipse的表达式视图中有以下内容:

backingBean.getClass() - > myPackage.UserCredentialsBean

backingBean instanceOf myPackage.UserCredentialsBean - >假

所以上面的施法失败......

这怎么可能?

更新:其他“症状”:会话超时后我遇到此问题

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

有趣的问题。我只能想到两种可能性。

1-空对象。 instanceOf通常对null对象失败。只需确保bean已初始化。

2-级装载机问题。如果两个不同的类加载器加载了同一类的两个对象,则instanceOf将失败。

这不是一个全面的列表,只是我能想到的两件事。

答案 1 :(得分:2)

ClassLoader问题肯定。很可能应用程序已重新部署(因此创建了新的类加载器实例),但旧对象仍然在(磁盘序列化?)会话或内存中。

类名相同,但类加载器实例不同。 Instanceof查看完整的类名和类加载器的相等性。

P.S。这实际上是一个非常普遍的问题。它通常在后台线程被唤醒时才会被发现,只是为了发现应用程序已被重新部署,线程的类加载器已经消失,然后它会将NoClassDefFound或ClassCast抛给那些并不总是意识到这实际上是一个僵尸的开发人员。以前的部署,并试图在他们的代码中找到错误。