我正在尝试修改列表中选择对象中的字段,但是我找不到使用纯Iterator的方法,因为它没有set()方法。

我尝试使用提供set()方法的ArrayListIterator,但这会引发强制转换异常。有办法解决此问题吗?

   Iterator it = topContainer.subList.iterator();
   while (it.hasNext()) {
      MyObject curObj = (MyObject) it.next();
      if ( !curObj.getLabel().contains("/") ) {
           String newLabel = curObj.getLabel() + "/";
           curObj.setLabel(newLabel);
           ((ArrayListIterator) it).set(curObj)
       }
    }


我希望可以毫无问题地设置列表中的原始当前对象,但是却收到了这个异常:


  java.util.ArrayList $ itr无法转换为
  org.apache.commons.collections.iterators.ArrayListIterator


完成我想做的事情的正确方法是什么?

最佳答案

您根本不需要调用set。您可以在setLabel上调用curObj

// please, don't use raw types!
Iterator<? extends MyObject> it = topContainer.subList.iterator();
while (it.hasNext()) {
   MyObject curObj = it.next();
   if ( !curObj.getLabel().contains("/") ) {
       String newLabel = curObj.getLabel() + "/";
       curObj.setLabel(newLabel);
   }
}

10-08 16:03