【问题标题】:java.lang.ClassCastExceptionjava.lang.ClassCastException
【发布时间】:2010-08-18 10:39:42
【问题描述】:

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

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

【问题讨论】:

  • 看起来您那里没有完整的异常消息。假设您使用的是 Java 5 或更高版本,则异常应包括无法将 what 转换为 what 的详细信息,例如` java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Integer`

标签: java


【解决方案1】:

根据the documentation

抛出表明代码已尝试将Object 强制转换为子类 它不是一个例子。例如,以下代码生成ClassCastException

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

【讨论】:

  • +1 用于文档。异常文档通常可以很好地提示可能出现的问题。
  • +1 获取文档!如果你不想一直使用 google,你可以下载 java 库的源代码(或者搜索你的 java sdk 文件夹中是否已经有 src.zip)。然后,如果您将其链接到您的项目,您只需打开相关文件并阅读那里的 javadocs...
  • bine Laur, ce mic e internetul :)
【解决方案2】:

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

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;
}

【讨论】:

  • 如果最后一个例子改成if (myFruit instanceof Apple) { Apple myApple = (Apple) myFruit; },那就更能说明问题了
【解决方案3】:

@Laurențiu Dascălu 的回答解释了您如何/为什么会收到 ClassCastException。

您的异常消息对我来说看起来很可疑,但它可能会帮助您知道“[Lcom.rsa.authagent.authapi.realmstat.AUTHw”意味着您尝试投射的对象的实际类型是@ 987654321@;即它是一个数组对象。

通常,解决此类问题的下一步是:

  • 检查堆栈跟踪以确定哪个类的哪一行引发了异常,
  • 检查相应的源代码,看看预期的类型,并
  • 追溯以查看具有“错误”类型的对象来自何处。

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      为了避免x !instance of Long 问题 添加

      <property name="openjpa.Compatibility" value="StrictIdentityValues=false"/>
      

      在你的 persistence.xml 中

      【讨论】:

        【解决方案6】:
        ClassA a = <something>;
        ClassB b = (ClassB) a;
        

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

        【讨论】:

          猜你喜欢
          • 2015-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-10
          • 2019-11-26
          • 2012-11-13
          • 2013-09-04
          相关资源
          最近更新 更多