Ste*_*ike 3 java generics collections
我的功能出了问题.该代码对我来说非常好,它在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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望将函数用于类型的对象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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以使用Collections
Type CarPlan
和调用函数ShipPlan
doRemoveAusgefallenePlaene(pAllCarPlan);
doRemoveAusgefallenePlaene(pAllShipPlan);
Run Code Online (Sandbox Code Playgroud)
并且代码编译没有问题.不幸的是,在执行时会抛出UnsupportedOperationException
lPlanIterator.remove();
Run Code Online (Sandbox Code Playgroud)
我认为通过声明我明白了解错误Collection<? extends Plan>
.谁知道这个问题?
- 更新 - 对于那些对一种可能的解决方案感兴趣的人:
final List<CarPlan> lAllCarPlan = new ArrayList<CarPlan>(pAllCarPlan);
doRemoveAusgefallenePlaene(lAllCarPlan);
Run Code Online (Sandbox Code Playgroud)
用ShipPlan
和做得很好CarPlan
.
您可能正在迭代一个不可修改的集合,其迭代器因此不支持remove操作.
不可修改的集合的示例包括由其生成的集合Collections.unmodifiableXX()
.返回的列表Arrays.asList()
不是完全不可修改的(您可以在特定索引处设置元素),但不支持添加或删除操作,因为它是由您传入的数组直接支持的.
抛出:
UnsupportedOperationException
- 如果此迭代器不支持remove操作
您需要查看传入的内容,并确保实际上可以修改集合的结构.您还没有向我们展示该代码.