java.lang.ClassCastException

时间:2010-08-18 10:39:42

标签: java

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

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

6 个答案:

答案 0 :(得分:43)

根据the documentation

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

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

答案 1 :(得分:13)

当您尝试将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;
}

答案 2 :(得分:6)

@LaurenţiuDascălu的回答解释了如何/为什么会得到ClassCastException。

您的异常消息对我来说很可疑,但它可能会帮助您知道“[Lcom.rsa.authagent.authapi.realmstat.AUTHw”表示您尝试投射的对象的实际类型为{ {1}};即它是一个数组对象。

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

  • 检查堆栈跟踪以找出哪个类抛出异常的行,
  • 检查相应的源代码,以查看预期的类型,以及
  • 追溯到具有“错误”类型的对象的来源。

答案 3 :(得分:2)

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

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

如果您可以提供代码示例,那将真正有用......

答案 4 :(得分:1)

避免x !instance of Long概率 添加

<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/>
你的persistence.xml中的

答案 5 :(得分:0)

ClassA a = <something>;
ClassB b = (ClassB) a;

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