web-dev-qa-db-fra.com

java.math.BigInteger ne peut pas être converti en Java.lang.Integer

Je reçois l'exception suivante. 

Causé par: 

Java.lang.ClassCastException: Java.math.BigInteger ne peut pas être converti en Java.lang.Integer

avec le code suivant

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

à cette ligne 

Integer grandChildCount = (Integer) result[1];

Quelqu'un a-t-il une idée?

12
Code Junkie

Vous pouvez utiliser:

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

Ou peut-être utiliser Number pour couvrir à la fois les valeurs Integer et BigInteger.

35
Ted Hopp

Comme nous le voyons dans javaDoc, BigInteger n'est pas une sous-classe de Integer:

Java.lang.Object                      Java.lang.Object
   Java.lang.Number                       Java.lang.Number
      Java.math.BigInteger                    Java.lang.Integer

Et c’est la raison pour laquelle il est impossible de passer de BigInteger à Integer.

La conversion des primitives Java effectue certaines conversions (comme la conversion de double à int), tandis que la conversion des types ne transformera jamais les classes.

10
Andreas_D

Java.lang.Integer n'est pas une super classe de BigInteger. BigInteger et Integer héritent tous deux de Java.lang.Number, vous pouvez donc transtyper en Java.lang.Number.

Voir la documentation Java http://docs.Oracle.com/javase/1.5.0/docs/api/Java/lang/Number.html

4
btantlinger

La colonne dans la base de données est probablement une DECIMAL. Vous devriez la traiter comme une BigInteger, pas une Integer, sinon vous perdez des chiffres. Sinon, remplacez la colonne par int.

1
user207421

Vous pouvez essayer ceci:

((BigDecimal) volume).intValue();

J'utilise Java.math.BigDecimal convertir en int (type primitif).

C'est travaillé pour moi.

0
Võ Hoài Danh