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>
であることを確認しました。
ありがとう!
Arrays
ユーティリティを使用して、そのメソッドに渡すList
を取得している可能性があります。オブジェクトは確かにタイプArrayList
ですが、_Java.util.Arrays.ArrayList
_ではなく_Java.util.ArrayList
_です。
_Java.util.Arrays.ArrayList
_バージョンは不変であり、そのremove()
メソッドはオーバーライドされません。そのため、AbstractList
をスローするremove()
のUnsupportedOperationException
実装に依存します。
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();
}
}