不支持的操作抽象列表中的异常列表.remove() 在 ArrayList 上操作时

2022-08-31 20:01:17

ArrayList的列表迭代器确实实现了 remove 方法,但是,我得到以下抛出的异常:

UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:144)

通过此代码:

protected void removeZeroLengthStringsFrom(List<String> stringList)
{
    ListIterator<String> iter = stringList.listIterator();
    String s;
    while (iter.hasNext())
    {
        s = iter.next();
        if (s.length() == 0)
        {
            iter.remove();
        }
    }
}

我在这里错过了什么?我已经确认我路过的确实是.List<String>ArrayList<String>

谢谢!


答案 1

我认为您可能正在使用该实用程序来获取您传递到该方法中的实用程序。该对象确实是类型,但它是 ,而不是 。ArraysListArrayListjava.util.Arrays.ArrayListjava.util.ArrayList

版本是不可变的,其方法不会被覆盖。因此,它服从于 的实现,这会抛出一个 .java.util.Arrays.ArrayListremove()AbstractListremove()UnsupportedOperationException


答案 2

我怀疑您正在传递一个 ArrayList,因为 ArrayList 迭代器上的 remove 方法不会引发该异常。

我猜你正在传递一个用户派生的ArrayList类,他的迭代器确实在删除时抛出了这个异常。

public void remove() {
    if (lastRet == -1)
    throw new IllegalStateException();
        checkForComodification();

    try {
    AbstractList.this.remove(lastRet);
    if (lastRet < cursor)
        cursor--;
    lastRet = -1;
    expectedModCount = modCount;
    } catch (IndexOutOfBoundsException e) {
    throw new ConcurrentModificationException();
    }
}