【问题标题】:ClassCastException and incompatibleClassCastException 和不兼容
【发布时间】:2014-03-12 06:31:16
【问题描述】:

在我记得的一个方法中,在包含以下代码的行中抛出了一个错误。

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer

Integer count = (Integer) result[1];

我将代码替换为

Integer count = ((BigDecimal) result[1]).intValue();

错误消失了。

但是我在新项目中使用相同的代码 sn-ps 时出现以下错误。

java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Integer

只是想知道,这两者是否相同。

【问题讨论】:

  • 在不知道result 是什么的情况下很难帮助您...
  • 如果您对相同的代码 sn-p 遇到相同的错误,通常情况下,这是相同的问题,相同的解决方案将适用。
  • 结果数组的类型是什么?
  • 对于不兼容的错误:在 WPS 中使用交换服务器关系 API 并以 Oracle 作为数据库时收到此异常。www-01.ibm.com/support/docview.wss?uid=swg1JR31122 让我问了这个问题。跨度>
  • 你找到java.math.Integer了吗?在java中没有这样的......

标签: java classcastexception


【解决方案1】:

两者不一样 Integer count = (Integer) result[1]; 尝试将 BigDecimal 对象转换为整数。总是会抛出异常。

Integer count = ((BigDecimal) result[1]).intValue(); 如果您的结果有 BigDecimal 对象,这将起作用。

最好检查一下是否正确编译了代码。

【讨论】:

    【解决方案2】:

    试试这个:

    Integer count = ((BigDecimal) result[1]).intValueExact();
    

    或者:http://www.tutorialspoint.com/java/math/bigdecimal_intvalueexact.htm

    【讨论】:

      【解决方案3】:

      BigDecimal.intValueExact()(或 BigDecimal.intValue()):

      将此 BigDecimal 转换为 int。这种转换类似于 Java 语言规范中定义的从 double 到 short 的缩小原语转换:BigDecimal 的任何小数部分都将被丢弃,如果生成的“BigInteger”太大而无法放入 int,则只有低-order 32 位被返回。请注意,此转换可能会丢失有关此 BigDecimal 值的整体大小和精度的信息,并返回带有相反符号的结果。

      请注意 BigDecimal 可能包含大于 Integer.MAX_VALUE 的值。

      参考:here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-22
        • 2019-09-05
        • 1970-01-01
        • 1970-01-01
        • 2020-11-15
        • 2023-03-24
        • 2011-05-24
        • 2013-01-26
        相关资源
        最近更新 更多