请帮助我理解,下面的代码显示了类型不匹配:“无法从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));
}
}
答案 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) {
. . .
}