java.lang.ClassCastException

通常是什么原因得到java.lang.ClassCastException ..? 我的应用程序中出现以下错误

java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw 

根据文件 :

抛出以指示代码已尝试将Object转换为不是实例的子类。 例如,以下代码生成ClassCastException

 Object x = new Integer(0); System.out.println((String)x); 

当您尝试将Object的实例强制转换为不是的类型时,会发生ClassCastException 。 仅当转换对象遵循与您尝试强制转换的类型的“是”关系时,转换才有效。 例如

 Apple myApple = new Apple(); Fruit myFruit = (Fruit)myApple; 

这是因为苹果’是’水果’。 但是,如果我们改变这一点

 Fruit myFruit = new Fruit(); Apple myApple = (Apple)myFruit; 

这将抛出一个ClasCastException,因为Fruit不是(总是)Apple。

最好先使用instanceof检查来保护任何显式的强制转换:

 if (myApple instanceof Fruit) { Fruit myFruit = (Fruit)myApple; } 

@LaurenţiuDascălu的答案解释了如何/为何获得ClassCastException。

你的exception消息看起来很可疑,但它可能会帮助你知道“[Lcom.rsa.authagent.authapi.realmstat.AUTHw”意味着你试图投射的对象的实际类型是com.rsa.authagent.authapi.realmstat.AUTHw[] ; 即它是一个数组对象。

通常,解决此类问题的后续步骤是:

  • 检查stacktrace以确定哪个类抛出exception的哪一行,
  • 检查相应的源代码,看看预期的类型,以及
  • 追溯到具有“错误”类型的对象来自何处。

这是因为你正在转向错误的东西 – 你试图转换为特定类型,而你的快递所指的对象与该类型不兼容。 例如:

 Object x = "this is a string"; InputStream y = (InputStream) x; // This will throw ClassCastException 

如果你能提供一个代码示例,那真的会有帮助……

为了避免x !instance of Long概率添加

  

在persistence.xml中

 ClassA a = ; ClassB b = (ClassB) a; 

如果ClassA不是ClassB的子类,第二行将失败,并将抛出ClassCastException。