JAvaエラーjava.lang.UnsupportedOperationException
2103 ワード
問題の説明:
コードにはArrays.asList(strings)が使用されている.配列をListに変換
次にadd(「test 3」)を使用して新しい要素を追加するときに問題が発生しました.コードは以下の通りです.
次のように誤報する
問題の分析:
ソースコードの表示:Arrays.asList()メソッドにより最終的にArrayListに戻る
このArrayListはArraysの内部クラス、すなわちjava.util.Arrays$ArrayListです
一般的なjava.util.ArrayListではありません
JAva.util.ArrayListとjava.util.Arrays$ArrayListはjava.util.AbstractListから継承されています.addメソッドが書き換えられているのとは異なります
書き換えない場合は、親addメソッドが呼び出されます.このメソッドはデフォルトでU n s p p p p o rtedOperationExceptionを放出します.
問題解決:
new ArrayList()方式で変換
コードにはArrays.asList(strings)が使用されている.配列をListに変換
次にadd(「test 3」)を使用して新しい要素を追加するときに問題が発生しました.コードは以下の通りです.
String[] strings = new String[]{"test1", "test2"};
List propertyTypeEnums = Arrays.asList(strings);
try {
propertyTypeEnums.add("test3");
} catch (Exception e) {
e.printStackTrace();
}
次のように誤報する
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
問題の分析:
ソースコードの表示:Arrays.asList()メソッドにより最終的にArrayListに戻る
public static List asList(T... a) {
return new ArrayList<>(a);
}
このArrayListはArraysの内部クラス、すなわちjava.util.Arrays$ArrayListです
package java.util;
public class Arrays {
private static class ArrayList extends AbstractList
implements RandomAccess, java.io.Serializable
{...}
}
一般的なjava.util.ArrayListではありません
package java.util;
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable
{
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
}
JAva.util.ArrayListとjava.util.Arrays$ArrayListはjava.util.AbstractListから継承されています.addメソッドが書き換えられているのとは異なります
書き換えない場合は、親addメソッドが呼び出されます.このメソッドはデフォルトでU n s p p p p o rtedOperationExceptionを放出します.
package java.util;
public abstract class AbstractList extends AbstractCollection implements List {
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
}
問題解決:
new ArrayList()方式で変換
List propertyTypeEnums = new ArrayList(Arrays.asList(strings));
try {
propertyTypeEnums.add("test3");
} catch (Exception e) {
e.printStackTrace();
}