it-swarm.com.de

java.math.BigInteger kann nicht in Java.lang.Integer umgewandelt werden

Ich bekomme die folgende Ausnahme. 

Verursacht durch: 

Java.lang.ClassCastException: Java.math.BigInteger kann nicht in .__ umgewandelt werden. Java.lang.Integer

mit dem folgenden 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);
}

an dieser Linie 

Integer grandChildCount = (Integer) result[1];

Hat jemand eine Idee?

12
Code Junkie

Sie können verwenden:

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

Oder vielleicht in Number umwandeln, um sowohl Integer als auch BigInteger abzudecken.

35
Ted Hopp

Wie wir aus dem javaDoc sehen, ist BigInteger keine Unterklasse von Integer:

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

Aus diesem Grund ist ein Umstieg von BigInteger auf Integer unmöglich.

Das Casting von Java-Grundelementen führt einige Konvertierungen durch (wie das Casting von double in int), während das Casting von Typen Klassen niemals transformiert.

10
Andreas_D

Java.lang.Integer ist keine Superklasse von BigInteger. Sowohl BigInteger als auch Integer erben von Java.lang.Number, sodass Sie einen Java.lang.Number verwenden können.

Siehe die Java-Dokumente http://docs.Oracle.com/javase/1.5.0/docs/api/Java/lang/Number.html

4
btantlinger

Die Spalte in der Datenbank ist wahrscheinlich eine DECIMAL. Sie sollten es als BigInteger und nicht als Integer verarbeiten, da Sie sonst Ziffern verlieren. Oder ändern Sie die Spalte in int.

1
user207421

Sie können dies versuchen:

((BigDecimal) volume).intValue();

Ich verwende Java.math.BigDecimal convert in int (primitiver Typ).

Es ist für mich gearbeitet.

0
Võ Hoài Danh