2012-10-05 35 views
0

請幫我理解,下面的代碼顯示了類型不匹配:「不能從元素類型對象轉換爲列表」在for語句中。我知道我錯過了一些愚蠢的東西。請幫忙。在Java中循環遍歷一個列表

public void setMapPriceValue(SolrItemVO solrItemVO, ArrayList proce1) throws SolrDAOException 
{ 
    List xcatentAttrList = (List<Xcatentattr>) proce1.get(0); 

    solrItemVO.setMapPrice(-1); // setting default value 

    for(List xcatentattr : xcatentAttrList){ 

     if(xcatentattr.get(0) == 33) 

       solrItemVO.setMapPrice(xcatentattr.get(1)); 

       solrItemVO.setMapPriceVal(xcatentattr.get(2)); 

     } 

} 

回答

1

如果你要輸入的東西儘量讓他們輸入

List<Xcatentattr> xcatentAttrList = (List<Xcatentattr>) proce1.get(0); 

solrItemVO.setMapPrice(-1); // setting default value 

for(Xcatentattr xcatentattr : xcatentAttrList){ 

    if(xcatentattr.get(0) == 33) 

      solrItemVO.setMapPrice(xcatentattr.get(1)); 

      solrItemVO.setMapPriceVal(xcatentattr.get(2)); 

    } 
} 

那麼答案可能會更清晰;)

for循環的類型爲Xatentattr。您正在循環訪問該類型的列表。

看看這個link上的for-each循環

3

首先你混合仿製藥和原料類型 - 這將讓你的生活更容易,如果你只使用泛型:

List<Xcatentattr> xcatentAttrList = (List<Xcatentattr>) proce1.get(0); 

您還可以考慮在你的方法簽名使用正確的泛型類型(我假設proce1是列表的列表):

public void setMapPriceValue(SolrItemVO solrItemVO, List<List<Xcatentattr>> proce1) 

在這種情況下,你並不需要投更多:

List<Xcatentattr> xcatentAttrList = proce1.get(0); 

那麼對於增強的for循環的語法是for (TypeOfObjectInYourList object : list),所以你的情況:

for(Xcatentattr xcatentattr : xcatentAttrList) 
+0

作爲@assylias指出你刪除函數第一行上的對象的類型。一個通用的'List'實際上是'List '所以'xcatentAttrList'不能被轉換成'Xcatentattr'。 –

0

更多信息這裏有兩個問題。

  • 首先,如果你聲明List xcatentAttrList不使用泛型,Java可以只知道你的列表中包含Object秒。所以你的for循環將不得不循環遍歷Object的列表。
  • 其次,鑄(List<Xcatentattr>)proce1意味着該列表包含Xcatentattr元素,但您正在迭代List對象。

所以,只要你已經宣佈的List使用泛型(因此說你與Xcatentattr元素的列表工作),循環for是:

for (Xcatentattr xcatentattr : xcatentAttrList) { 
    . . . 
}