java.math.BigInteger 不能转换为 java.lang.Integer
Posted
技术标签:
【中文标题】java.math.BigInteger 不能转换为 java.lang.Integer【英文标题】:java.math.BigInteger cannot be cast to java.lang.Integer 【发布时间】:2012-03-19 15:20:16 【问题描述】:我收到以下异常。
原因:
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];
有人知道吗?
【问题讨论】:
谢谢大家,我正在生产中试用它,希望它现在可以工作。 【参考方案1】:你可以使用:
Integer grandChildCount = ((BigInteger) result[1]).intValue();
或者可能转换为 Number
以覆盖 Integer
和 BigInteger
值。
【讨论】:
【参考方案2】:正如我们从 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
),而类型的转换永远不会转换类。
【讨论】:
我很困惑,因为本地数据库是由 hibernate 使用 Integer 生成的,并且在生产中也应该发生同样的情况,但是在生产中它被更改为 int。【参考方案3】:java.lang.Integer
不是BigInteger
的超类。 BigInteger
和 Integer
都继承自 java.lang.Number
,因此您可以转换为 java.lang.Number
。
请参阅 java 文档 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html
【讨论】:
【参考方案4】:你可以试试这个:
((BigDecimal) volume).intValue();
我使用java.math.BigDecimal
转换为int
(原始类型)。
它对我有用。
【讨论】:
【参考方案5】:数据库中的列可能是DECIMAL
。您应该将其处理为BigInteger
,而不是Integer
,否则您将丢失数字。或者将列更改为int
。
【讨论】:
以上是关于java.math.BigInteger 不能转换为 java.lang.Integer的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 java.math.BigInteger 无法转换为 java.lang.Integer?
ClassCastException:java.math.BigInteger 在连接到 MySQL 时无法转换为 java.lang.Long
java Operator ‘/‘ cannot be applied to ‘java.math.BigInteger‘, ‘int‘