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

Cod*_*kie 17 java mysql sql postgresql hibernate

我收到以下异常.

引起:

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);
}
Run Code Online (Sandbox Code Playgroud)

在这条线上

Integer grandChildCount = (Integer) result[1];
Run Code Online (Sandbox Code Playgroud)

有人有任何想法吗?

Ted*_*opp 47

您可以使用:

Integer grandChildCount = ((BigInteger) result[1]).intValue();
Run Code Online (Sandbox Code Playgroud)

或者也许是Number为了掩盖IntegerBigInteger价值观.

  • `.`比强制转换更严格,所以`((BigInteger)result [1]).intValue()`是首选,我想. (4认同)

And*_*s_D 12

正如我们从javaDoc中看到的那样,BigInteger它不是以下的子类Integer:

java.lang.Object                      java.lang.Object
   java.lang.Number                       java.lang.Number
      java.math.BigInteger                    java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

这就是为什么从铸造的理由BigIntegerInteger是不可能的.

转换java基元将进行一些转换(如从转换double到转换int),而转换类型永远不会转换类.


Võ *_*anh 6

你可以试试这个:

((BigDecimal) volume).intValue();
Run Code Online (Sandbox Code Playgroud)

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

它对我有用。


bta*_*ger 5

java.lang.Integer不是 的超类BigInteger。双方BigIntegerInteger就继承java.lang.Number,所以你可以转换为java.lang.Number

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