Arrays.asList()で発生したListにおけるadd、remove時報異常U n s p p p p o rtedOperationException

883 ワード

例外:
配列を通過するasList()は集合に変換する、インクリメント・削除時に異常javaを実行する.lang.UnsupportedOperationException
String[] str = {"1",  "2", "3"};
List list = ArrayList(Arrays.asList(str);
list.remove("1");
Caused by: java.lang.UnsupportedOperationException
        at java.util.AbstractList.remove(AbstractList.java:161)
        at java.util.AbstractList$Itr.remove(AbstractList.java:374)

理由:
アレックスを通ってasList()はjavaではなくArraysの内部クラスArrayListを返す.util.ArrayList,Arraysの内部クラスArrayListとjava.util.ArrayListはすべてAbstractListを継承しており、remove、addなどの方法はAbstractListではデフォルトthrow UnsupportedOperationExceptionであり、何もしない.java.util.ArrayListはこれらのメソッドを書き換えますが、Arraysの内部クラスArrayListは書き換えていないため、例外が放出されます.
解決策
再包装asList()
...
List list = new ArrayList( Arrays.asList(str) );
list.remove("1");