0

请帮助我理解,以下代码在 for 语句中显示类型不匹配:“无法从元素类型对象转换为列表”。我知道我错过了一些愚蠢的东西。请帮忙。

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

        }

}
4

3 回答 3

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)
于 2012-10-05T14:12:19.603 回答
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 循环的更多信息

于 2012-10-05T14:12:38.603 回答
0

这里有两个问题。

  • 首先,如果你声明List xcatentAttrList不使用泛型,Java 只能知道你的列表包含Objects。所以你的for循环必须遍历一个Objects 列表。
  • 其次,演员(List<Xcatentattr>)proce1表暗示列表包含Xcatentattr元素,但您正在迭代List对象。

因此,如果您已经声明了Listusing 泛型(因此说您正在使用Xcatentattr元素列表),那么循环for将是:

 for (Xcatentattr xcatentattr : xcatentAttrList) {
     . . .
 }
于 2012-10-05T14:18:50.490 回答