2013-05-03 58 views
3
List queryList = executeReadAllSQLQuery(queryString); 
    for (Iterator i = queryList.iterator(); i.hasNext();) { 
     Object values[] = (Object[]) i.next(); 
     FDetails pDetails = transform(values); 
     fDList.add(pDetails); 
     values = null; 
    } 

錯誤我得到第3行:java.math.BigDecimal cannot be cast to [Ljava.lang.Object;java.math.BigDecimal不能轉換爲[Ljava.lang.Object;

我變換函數:

private FDetails transform(Object[] values) { 
    FDetails Details = new FDetails(); 
    Details.setPb((BigDecimal)values[0]); 
    Details.setPm((BigDecimal)values[1]); 
    Details.setEl((BigDecimal)values[1]); 
    Details.setUl((BigDecimal)values[1]); 
    return BalanceDetails; 
} 

請大家幫我解決這些問題。

+0

如果您使用泛型而不是原始類型,這將更容易。 – jlordo 2013-05-03 09:31:20

+0

什麼是查詢?它每行返回一個BigDecimal值,而不是您認爲的那樣的對象數組。 – 2013-05-03 09:33:03

+1

向我們展示'executeReadAllSQLQuery(queryString);'!!!的代碼 – NINCOMPOOP 2013-05-03 09:34:42

回答

2

這個怎麼樣代碼:

@SuppressWarnings("rawtypes") 
List<BigDecimal> queryList = executeReadAllSQLQuery(queryString); 

FDetails details = new FDetails(); 
int i = 0; 
details.setPb(queryList.get(i ++)); 
details.setPm(queryList.get(i ++)); 
... 

fDList.add(pDetails); 

注意:在循環內部調用fDList.add()幾乎是c當然是錯的。循環會從列表中的一個值,但是你想從列表中的所有五個值,來自這五個價值創造的FDetails一個實例和單實例添加到fDList一次

+0

謝謝Aaron.I已經解決了我的問題 – Dev 2013-05-03 11:16:22

+0

@VampireHunter:那就不要忘了其他人使用這個網站,以及當他們看到不正確的問題,他們會感到困惑答案。要麼說我們的答案是正確的,要麼發佈解決方案。 – 2013-05-03 12:36:15

0

以下行將返回您java.math.BigDecimal,您試圖非法轉儲到Object[]。看來你的queryListList<java.math.BigDecimal>

i.next(); // is returning you a java.math.BigDecimal 
3

從錯誤中可以明顯看出,您的列表queryList實際上是一個BigDecimals列表。因此,這將是工作

BigDecimal value = (BigDecimal) i.next(); 

,但因爲它不是你所期望的那麼executeReadAllSQLQuery返回錯誤結果

BTW的for-each會更好看呢

for (Object obj : queryList) { 
    ... 
+0

感謝您的回覆。但如果我使用BigDecimal value =(BigDecimal)i.next();那麼我怎麼能像在transform函數()中那樣設置屬性,如圖所示。 – Dev 2013-05-03 09:43:34

+0

BigDecimal value =(BigDecimal)i.next();會一次返回一個BigDecimal值。行將被更改。我想爲我的視圖中的單行設置值 – Dev 2013-05-03 09:46:40

+0

@VampireHunter:Java非常不願在類型之間進行轉換。因此,您需要手動創建一個對象數組,然後將值複製到該數組中,然後使用新數組調用該方法。 – 2013-05-03 09:47:22

0

這工作很細!請嘗試此操作

HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put("amt", "1000"); 

    System.out.println("Amount is::" 
      + new BigDecimal((String) map.get("amt"))); 
相關問題