我有一个关于函数的问题。 这段代码对我来说运行得相当好,它会在布尔属性为真时删除一个项:
private void doRemoveAusgefallenePlaene(Collection<CarPlan> pAllCarPlan) {
for (Iterator<CarPlan> lCarPlanIterator = pAllCarPlan.iterator(); lCarPlanIterator.hasNext();) {
CarPlan lCarPlan = lCarPlanIterator.next();
if (!lCarPlan.isAusfall()) {
lCarPlanIterator.remove();
}
}
}
我希望能够对实现接口
Plan
的CarPlan
和ShipPlan
对象使用该函数。请注意,不要删除或更改HTML标签。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();
}
}
}
现在我可以使用类型为
CarPlan
和ShipPlan
的Collections
调用该函数。doRemoveAusgefallenePlaene(pAllCarPlan);
doRemoveAusgefallenePlaene(pAllShipPlan);
代码能够顺利编译。不幸的是,在执行时,UnsopportedOperationException在该行抛出。
lPlanIterator.remove();
我觉得我在声明
Collection<? extends Plan>
时理解错了一些东西。有人知道问题是什么吗?-- 更新 -- 对于那些对一种可能的解决方案感兴趣的人:
final List<CarPlan> lAllCarPlan = new ArrayList<CarPlan>(pAllCarPlan);
doRemoveAusgefallenePlaene(lAllCarPlan);
与
ShipPlan
和CarPlan
组合使用效果很好。
Collection<Plan>
吗? - Evan Knowles