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>
。
谢谢!
答案 0 :(得分:127)
我认为您可能正在使用Arrays
实用程序来获取传递给该方法的List
。该对象确实属于ArrayList
类型,但它是java.util.Arrays.ArrayList
,而不是java.util.ArrayList
。
java.util.Arrays.ArrayList
版本是不可变的,并且不会覆盖其remove()
方法。因此,它遵循AbstractList
的{{1}}实施,它会引发remove()
。
答案 1 :(得分: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();
}
}