2012-03-01 37 views
9

我收到以下異常。java.math.BigInteger不能轉換爲java.lang.Integer

所致:

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

at this line

Integer grandChildCount = (Integer) result[1]; 

有人有什麼想法嗎?

+0

謝謝大家,我現在在生產中試用它,希望它現在可以工作。 – 2012-03-01 05:34:30

回答

25

您可以使用:

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

或許投給Number既包括IntegerBigInteger值。

+4

'.'綁定比cast更緊密,所以'((BigInteger)result [1])。intValue()'會是首選,我想。 – 2012-03-01 05:21:36

+0

@RayToal - 好。 – 2012-03-01 05:47:04

1

數據庫中的列可能是DECIMAL。您應該將其作爲BigInteger進行處理,而不是Integer,否則您會丟失數字。或者將列更改爲int

8

當我們從JavaDoc中看到,BigInteger不是Integer一個子類:

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

這就是爲什麼從鑄造到BigIntegerInteger不可能的原因。

Java基元的投射將進行一些轉換(如從double投射到int),而投射類型將永遠不會轉換類。

+0

我很困惑,因爲本地數據庫是通過休眠生成的一個Integer數據庫,生產過程中應該發生同樣的情況,但它在生產中已更改爲int。 – 2012-03-01 05:53:36

相關問題