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

ここには 2 つの問題があります。

  • まず、ジェネリックを使用せずに宣言すると、Java はリストにsList xcatentAttrListが含まれていることしか認識できません。Objectしたがって、forループは s のリストを反復処理する必要がありますObject
  • 次に、キャスト(List<Xcatentattr>)proce1はリストに要素が含まれていることを意味しますが、オブジェクトXcatentattrを繰り返し処理していListます。

したがって、ジェネリックを使用して宣言したList場合 (したがって、要素のリストを操作していると言っている場合Xcatentattr)、ループforは次のようになります。

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