我收到以下异常。
引起:
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];
有人有任何想法吗?
答案 0 :(得分:36)
您可以使用:
Integer grandChildCount = ((BigInteger) result[1]).intValue();
或者强制转换为Number
以涵盖Integer
和BigInteger
值。
答案 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
的超类。 BigInteger
和Integer
都继承自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
(原始类型)。
这对我有用。