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。