java.lang.ClassCastException

sel*_*vam 23 java

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

java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
Run Code Online (Sandbox Code Playgroud)

Lau*_*ălu 45

根据文件:

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

Object x = new Integer(0);
System.out.println((String)x); 
Run Code Online (Sandbox Code Playgroud)

  • +1用于文档.异常文档通常会给出错误提示. (5认同)

mR_*_*r0g 16

一个ClassCastException当您试图投对象的实例的类型,它不是ocurrs.仅当转换对象遵循与您尝试强制转换的类型的"是"关系时,转换才有效.例如

Apple myApple = new Apple();
Fruit myFruit = (Fruit)myApple;
Run Code Online (Sandbox Code Playgroud)

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

Fruit myFruit = new Fruit();
Apple myApple = (Apple)myFruit;
Run Code Online (Sandbox Code Playgroud)

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

最好instanceof 先用支票来保护任何明确的演员:

if (myApple instanceof Fruit) {
  Fruit myFruit = (Fruit)myApple;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 6

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

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

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

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