java.math.BigInteger 无法转换为 java.lang.Integer。

39

我遇到了以下异常。

异常原因:

java.lang.ClassCastException: java.math.BigInteger无法转换为java.lang.Integer

使用以下代码引发了上述异常。

List queryResult = query.list();

for (Iterator<Object[]> it = queryResult.iterator(); it.hasNext();) {
    Object[] result = it.next();
    Integer childId = (Integer) result[0];
    Integer grandChildCount = (Integer) result[1];
    CompanyNode childNode = childNodes.get(childId);
    childNode.setHasChildren(grandChildCount != 0);
    childNode.setIsLeaf(grandChildCount == 0);
}
在这一行。
Integer grandChildCount = (Integer) result[1];

有人有什么想法吗?


谢谢大家,我现在正在尝试将它应用于生产环境,希望现在能够正常工作。 - Code Junkie
5个回答

72

你可以使用:

Integer grandChildCount = ((BigInteger) result[1]).intValue();
或者将其转换为Number类型,以涵盖整数和BigInteger值。

19

从Java文档中可以看出,BigInteger不是Integer的子类:

java.lang.Object                      java.lang.Object
   java.lang.Number                       java.lang.Number
      java.math.BigInteger                    java.lang.Integer

这就是为什么从BigIntegerInteger的强制类型转换是不可能的原因。

Java原始数据类型的强制类型转换会进行一些转换(例如从doubleint),而类型的强制类型转换永远不会转换类。


我感到困惑,因为本地数据库是由Hibernate生成的整数,而在生产环境中应该也是这样,但是在生产环境中它被改成了int。 - Code Junkie

6

你可以尝试这个:

((BigDecimal) volume).intValue();

我使用java.math.BigDecimal将其转换为int(原始类型)。

这对我有用。


6

1
数据库中的列可能是一个 DECIMAL。您应该将其处理为 BigInteger,而不是Integer,否则您将丢失数字。或者将该列更改为 int

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接