List addメソッドを使用してUnsupportedOperationException異常を報告する
1535 ワード
他のブログでこのような状況が現れた分析を見て、私も自分で最初から分析しないで、大神分析を添付しました.原文:https://blog.csdn.net/mengliluohua_151/article/details/42270809Javaでは、Arraysを使用できます.asList(T...a)メソッドは、1つの配列をListに変換し、指定された配列によってサポートされる固定サイズのリストを返す.このメソッドはCollectionと同じです.toArray()は、配列ベースのAPIとcollectionベースのAPIとの橋渡しとして機能する.返されるリストはシーケンス化可能であり,RandomAccessが実現される.
この方法は、複数の要素を含むように初期化された固定長のリストを作成する便利な方法も提供します.
List stooges = Arrays.asList("Larry", "Moe", "Curly");
変換後、addまたはremove法を用いるjavaは常に放出される.lang.UnsupportedOperationException異常.
下位レベルの実装コードは次のとおりです.
public static List asList(T... a) {
return new ArrayList(a);
}
ArrayListオブジェクトが作成されましたが、このArrayListはjavaではありません.utilパッケージの下にあるArrayListではなくjava.util.Arraysクラスの内部クラスの1つですが、実際には現代コードは以下の通りです.
private static class ArrayList extends AbstractList implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
}
このArrayListクラスはAbstractListクラスを継承し、addメソッドとremoveメソッドの実装プロセスは次のようになります.
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
したがって、操作をサポートしていない異常が発生したに違いありません.
では、1つの解決策はリストをArrayListにコピーすることです.
ArrayList newList = new ArrayList<>(list);add()とremove()メソッドを使用できます.
この方法は、複数の要素を含むように初期化された固定長のリストを作成する便利な方法も提供します.
List stooges = Arrays.asList("Larry", "Moe", "Curly");
変換後、addまたはremove法を用いるjavaは常に放出される.lang.UnsupportedOperationException異常.
下位レベルの実装コードは次のとおりです.
public static List asList(T... a) {
return new ArrayList(a);
}
ArrayListオブジェクトが作成されましたが、このArrayListはjavaではありません.utilパッケージの下にあるArrayListではなくjava.util.Arraysクラスの内部クラスの1つですが、実際には現代コードは以下の通りです.
private static class ArrayList extends AbstractList implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
このArrayListクラスはAbstractListクラスを継承し、addメソッドとremoveメソッドの実装プロセスは次のようになります.
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
したがって、操作をサポートしていない異常が発生したに違いありません.
では、1つの解決策はリストをArrayListにコピーすることです.
ArrayList newList = new ArrayList<>(list);add()とremove()メソッドを使用できます.