我的功能有问题。
该代码对我来说很好用,当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();
}
}
}
我的希望是将该函数用于
CarPlan
和ShipPlan
类型的对象(均实现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();
}
}
}
现在,我可以使用
Collections
和CarPlan
类型的ShipPlan
调用该函数doRemoveAusgefallenePlaene(pAllCarPlan);
doRemoveAusgefallenePlaene(pAllShipPlan);
并且代码编译没有问题。不幸的是,在执行时,在行中抛出了UnsupportedOperationException
lPlanIterator.remove();
我认为我通过声明
Collection<? extends Plan>
理解了一些错误。知道任何人的问题吗?
-更新-
对于那些对一种可能的解决方案感兴趣的人:
final List<CarPlan> lAllCarPlan = new ArrayList<CarPlan>(pAllCarPlan);
doRemoveAusgefallenePlaene(lAllCarPlan);
与
ShipPlan
和CarPlan
配合使用非常好。 最佳答案
您可能正在遍历一个不可修改的集合,因此其迭代器将不支持remove操作。
不可修改集合的示例包括Collections.unmodifiableXX()
生成的那些。 Arrays.asList()
返回的列表并不是完全不可修改的(您可以在特定索引处设置一个元素),但是不支持添加或删除操作,因为它直接由传入数组支持。
从Javadoc for remove()
:
抛出:UnsupportedOperationException
-如果此迭代器不支持remove操作。
您需要查看传入的内容,并确保可以实际修改集合的结构。您尚未向我们显示该代码。