我的功能有问题。该代码对我来说工作得很好,当布尔属性为真时它会删除一个项目:
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
TypeCarPlan
和ShipPlan
doRemoveAusgefallenePlaene(pAllCarPlan);
doRemoveAusgefallenePlaene(pAllShipPlan);
并且代码编译没有问题。不幸的是,在执行时抛出了 UnsupportedOperationException
lPlanIterator.remove();
我想我通过声明Collection<? extends Plan>
. 知道任何人的问题吗?
-- 更新 -- 对于那些对一种可能的解决方案感兴趣的人:
final List<CarPlan> lAllCarPlan = new ArrayList<CarPlan>(pAllCarPlan);
doRemoveAusgefallenePlaene(lAllCarPlan);
与ShipPlan
和一起使用效果很好CarPlan
。