我的功能有问题。
该代码对我来说很好用,当boolean属性为true时,它将删除一个项目:

private void doRemoveAusgefallenePlaene(Collection<CarPlan> pAllCarPlan) {
for (Iterator<CarPlan> lCarPlanIterator = pAllCarPlan.iterator(); lCarPlanIterator.hasNext();) {
  CarPlan lCarPlan = lCarPlanIterator.next();
  if (!lCarPlan.isAusfall()) {
    lCarPlanIterator.remove();
  }
}
}

我的希望是将该函数用于CarPlanShipPlan类型的对象(均实现Plan接口)。
private void doRemoveAusgefallenePlaene(Collection<? extends Plan> pAllPlan) {
  for (Iterator<? extends Plan> lIterator = pAllPlan.iterator(); lPlanIterator.hasNext();) {
    Plan lPlan = lPlanIterator.next();
    if (!lPlan.isAusfall()) {
      lPlanIterator.remove();
    }
  }
}

现在,我可以使用CollectionsCarPlan类型的ShipPlan调用该函数
doRemoveAusgefallenePlaene(pAllCarPlan);
doRemoveAusgefallenePlaene(pAllShipPlan);

并且代码编译没有问题。不幸的是,在执行时,在行中抛出了UnsupportedOperationException
lPlanIterator.remove();

我认为我通过声明Collection<? extends Plan>理解了一些错误。
知道任何人的问题吗?

-更新-
对于那些对一种可能的解决方案感兴趣的人:
final List<CarPlan> lAllCarPlan = new ArrayList<CarPlan>(pAllCarPlan);
doRemoveAusgefallenePlaene(lAllCarPlan);

ShipPlanCarPlan配合使用非常好。

最佳答案

您可能正在遍历一个不可修改的集合,因此其迭代器将不支持remove操作。

不可修改集合的示例包括Collections.unmodifiableXX()生成的那些。 Arrays.asList()返回的列表并不是完全不可修改的(您可以在特定索引处设置一个元素),但是不支持添加或删除操作,因为它直接由传入数组支持。

Javadoc for remove() :

抛出:UnsupportedOperationException-如果此迭代器不支持remove操作。

您需要查看传入的内容,并确保可以实际修改集合的结构。您尚未向我们显示该代码。

07-26 09:05