java.math.BigInteger cannot be cast to java.lang.Integer

139,046

Solution 1

You can use:

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

Or perhaps cast to Number to cover both Integer and BigInteger values.

Solution 2

As we see from the javaDoc, BigInteger is not a subclass of Integer:

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

And that's the reason why casting from BigInteger to Integer is impossible.

Casting of java primitives will do some conversion (like casting from double to int) while casting of types will never transform classes.

Solution 3

java.lang.Integer is not a super class of BigInteger. Both BigInteger and Integer do inherit from java.lang.Number, so you could cast to a java.lang.Number.

See the java docs http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html

Solution 4

You can try this:

((BigDecimal) volume).intValue();

I use java.math.BigDecimal convert to int (primitive type).

It is worked for me.

Solution 5

The column in the database is probably a DECIMAL. You should process it as a BigInteger, not an Integer, otherwise you are losing digits. Or else change the column to int.

Share:
139,046
Code Junkie
Author by

Code Junkie

Updated on August 01, 2020

Comments

  • Code Junkie
    Code Junkie almost 4 years

    I'm getting the following exception.

    Caused by:

    java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Integer

    with the following code

    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);
    }
    

    at this line

    Integer grandChildCount = (Integer) result[1];
    

    Does anybody have any idea?

  • Code Junkie
    Code Junkie about 12 years
    I was confused because the local database was generated with an Integer by hibernate and the same should of happened with production, but it was changed to an int in production.