通常是什么原因得到java.lang.ClassCastException ..?我的应用程序中出现以下错误
java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
答案 0 :(得分:43)
抛出以指示代码已尝试将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。