循环使用Java中的List

时间:2012-10-05 14:10:03

标签: java oop java-ee

请帮助我理解,下面的代码显示了类型不匹配:“无法从for语句中的元素类型Object转换为List”。我知道我错过了一些愚蠢的话。请帮忙。

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

        }

}

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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。您正在遍历该类型的列表。

有关for-each循环的详细信息,请查看此link

答案 2 :(得分:0)

这里有两个问题。

  • 首先,如果您在不使用泛型的情况下声明List xcatentAttrList,则Java只能知道您的列表包含Object。因此,您的for循环必须遍历Object s。
  • 列表
  • 其次,强制转换(List<Xcatentattr>)proce1表示该列表包含Xcatentattr个元素,但您正在迭代List个对象。

因此,如果您使用泛型声明了List(因此说您正在处理Xcatentattr元素列表),则循环for将为:

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