UnsupportedOperationException в AbstractList.remove() при работе в ArrayList
ArrayList
list iterator реализует метод remove, однако я получаю следующее исключение:
UnsupportedOperationException в 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
Я думаю, вы можете использовать утилиту Arrays
, чтобы получить List
, который вы передаете этому методу. Объект действительно имеет тип ArrayList
, но он java.util.Arrays.ArrayList
, а не java.util.ArrayList
.
Версия java.util.Arrays.ArrayList
неизменна, и ее метод remove()
не переопределяется. Таким образом, он отказывается от реализации AbstractList
remove()
, которая выдает UnsupportedOperationException
.
Ответ 2
Я сомневаюсь, что вам передается ArrayList, поскольку метод remove на итераторе ArrayList не генерирует это исключение.
Я предполагаю, что вам передают пользовательский класс 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();
}
}