java.math.BigInteger cannot be cast to java.lang.Integer
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
.
Code Junkie
Updated on August 01, 2020Comments
-
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 about 12 yearsI 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.