我的功能出了问题.该代码对我来说非常好,它在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)
现在我可以使用CollectionsType 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 …Run Code Online (Sandbox Code Playgroud) ArrayList描述为
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Run Code Online (Sandbox Code Playgroud)
而且大多数主要方法都适用于E泛型类型(get,set,add,addAll等)。
但是方法contains,indexOf,lastIndexOf和remove将对象类型作为参数-这仅是由于内部使用或Object.equals()或其他原因吗?
我不明白为什么包含(如果我在自定义类已经过去了,我可以重新审视我的hascode和equals方法,但这是整型其实)不工作.那么代替包含我可以使用的东西?请帮忙.
Set<Integer> st = new HashSet<>();
st.add(12);
Set<Integer> st1 = new HashSet<>();
st1.add(12);
System.out.println(st.contains(st1));
Run Code Online (Sandbox Code Playgroud) 我正在使用键T和值Long创建一个HashMap,我的remove方法(从AbstractCollection类中重写)看起来像这样:
public boolean remove(Object o) {
if(denseBag.containsKey(o)){
if(denseBag.get(o) == 1L){
denseBag.remove(o);
} else {
Long removed = denseBag.get(o);
T theO = (T) o;
denseBag.replace(theO, removed, removed--);
}
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
我收到消息:"输入安全性:从对象到T的未选中状态".我只是想确保它能正常工作.谢谢.
这不是我在现实生活中会做的事情,而是说:
LinkedList = a,b,c,d,e 我得到了相应的索引.
说,我想删除b (index=1) and d (index=3)(即周围的值c (index=j=2))
现在,我做(工作正常):
When j=2
LS.remove(j + 1); ----> j=3 (d removed)
LS.remove(j - 1); ----> j=1 (b removed)
Run Code Online (Sandbox Code Playgroud)
并被b and d删除.
但如果,我做(不起作用):
When j=2
LS.remove(j - 1); ----> j=1 (b removed)
LS.remove(j); ----> j=2 (d is not removed) (used j because due to above removal, LL has adjusted it self)
Run Code Online (Sandbox Code Playgroud)
即,当我首先移动'c'之前的值时,'d'不会被移除并且LL保持不变.我猜,我也在做同样的事情.
我错过了什么吗?
更新:
所以,当我改变签名时public void operation(String operator, Integer j) to public void operation(String …