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 以覆盖 IntegerBigInteger 值。

【讨论】:

【参考方案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 的超类。 BigIntegerInteger 都继承自 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‘

java之BigInteger类

[记录]java.math.biginteger cannot be cast to java.lang.long

java怎么把16进制的数转换为10进制的