java.math.BigInteger无法强制转换为java.lang.Integer

时间:2012-03-01 05:16:24

标签: java mysql sql hibernate postgresql

我收到以下异常。

引起:

  

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

有人有任何想法吗?

5 个答案:

答案 0 :(得分:36)

您可以使用:

Integer grandChildCount = ((BigInteger) result[1]).intValue();

或者强制转换为Number以涵盖IntegerBigInteger值。

答案 1 :(得分:11)

正如我们在javaDoc中看到的那样,BigInteger不是Integer的子类:

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

这就是为什么从BigInteger转换为Integer是不可能的原因。

对java基元进行转换会进行一些转换(例如从double转换为int),而转换类型永远不会转换类。

答案 2 :(得分:4)

java.lang.Integer不是BigInteger的超类。 BigIntegerInteger都继承自java.lang.Number,因此您可以转换为java.lang.Number

请参阅java docs http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html

答案 3 :(得分:1)

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

答案 4 :(得分:0)

你可以试试这个:

((BigDecimal) volume).intValue();

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

这对我有用。