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

我收到以下exception。

引起:

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

使用以下代码

List queryResult = query.list(); for (Iterator 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]; 

有人有什么想法吗?

您可以使用:

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

或者可能转换为Number以覆盖IntegerBigInteger值。

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

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

这就是为什么从BigIntegerInteger是不可能的原因。

抛出java原语将进行一些转换(如从double转换为int ),而类型的转换永远不会转换类。

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

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

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

你可以试试这个:

 ((BigDecimal) volume).intValue(); 

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

这对我有用。