相关疑难解决方法(0)

从Collection <?删除项目?扩展MyObject> UnsupportedOperationException

我的功能出了问题.该代码对我来说非常好,它在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)

java generics collections

3
推荐指数
1
解决办法
268
查看次数

Java ArrayList indexOf泛型类型

ArrayList描述为

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Run Code Online (Sandbox Code Playgroud)

而且大多数主要方法都适用于E泛型类型(getsetaddaddAll等)。

但是方法containsindexOflastIndexOfremove对象类型作为参数-这仅是由于内部使用或Object.equals()或其他原因吗?

java generics arraylist generic-collections

3
推荐指数
1
解决办法
565
查看次数

HashSet包含不适用于Integer

我不明白为什么包含(如果我在自定义类已经过去了,我可以重新审视我的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)

java

3
推荐指数
2
解决办法
1825
查看次数

类型安全:从Object到T的未选中强制转换(Java)

我正在使用键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的未选中状态".我只是想确保它能正常工作.谢谢.

java generics

3
推荐指数
1
解决办法
4492
查看次数

在LinkedList中按索引删除

这不是我在现实生活中会做的事情,而是说:

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 …

java linked-list

1
推荐指数
1
解决办法
5948
查看次数