次の例外が発生しています。
のせいで:
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];
誰にもアイデアはありますか?
次を使用できます。
Integer grandChildCount = ((BigInteger) result[1]).intValue();
または、Number
とInteger
の両方の値をカバーするために、BigInteger
にキャストすることもできます。
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
へのキャストなど)何らかの変換を行いますが、型のキャストはクラスを変換しません。
Java.lang.Integer
はBigInteger
のスーパークラスではありません。 BigInteger
とInteger
は両方ともJava.lang.Number
から継承するため、Java.lang.Number
にキャストできます。
Java docs http://docs.Oracle.com/javase/1.5.0/docs/api/Java/lang/Number.html を参照してください。
データベースの列はおそらくDECIMAL
です。 BigInteger
ではなくInteger
として処理する必要があります。そうしないと、桁が失われます。または、列をint
に変更します。
これを試すことができます:
((BigDecimal) volume).intValue();
私が使う Java.math.BigDecimal
int
(プリミティブ型)に変換します。
それは私のために働いています。