JavaリストUnsupportedOperationException
1. 概要
このクイックチュートリアルでは、ほとんどのList実装のAPIであるUnsupportedOperationExceptionを操作するときに発生する可能性のある一般的なExceptionについて説明します。
java.util.List には、通常のa rrayがサポートできるよりも多くの機能があります。 たとえば、組み込みのメソッド呼び出しが1つしかない場合、特定の要素が構造内にあるかどうかを確認できます。 そのため、通常、配列をリストまたはコレクションに変換する必要があります。
コアJavaリスト実装の概要– ArrayList –この記事を参照してください。
2. UnsupportedOperationException
このエラーが頻繁に発生する方法は、 java.util.Arrays:の asList()メソッドを使用する場合です。
public static List asList(T... a)
それは戻ります:
- 特定の配列のサイズの固定サイズリスト
- 元の配列の要素と同じタイプの要素であり、オブジェクトである必要があります
- 元の配列と同じ順序の要素
- シリアライズ可能であり、RandomAccessを実装するリスト
Tはvarargsであるため、配列またはアイテムをパラメーターとして直接渡すことができ、メソッドは固定サイズの初期化されたリストを作成します。
List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");
実際の配列を渡すこともできます。
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
返されるリストは固定サイズのリストであるため、要素を追加/削除できません。
さらに要素を追加しようとすると、UnsupportedOperationExceptionが発生します。
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");
このルート例外返されたオブジェクトが実装されていないということです追加() と同じではないので操作
これは、java.util.Arrays。のArrayListです。
同じ例外を取得する別の方法は、取得したリストから要素を削除しようとすることです。
一方、必要な場合に備えて、変更可能なListを取得する方法があります。
それらの1つは、 asList()の結果から直接ArrayListまたは任意の種類のリストを作成することです。
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));
3. 結論
結論として、リストに要素を追加すると、不変のリスト以外にも問題が発生する可能性があることを理解することが重要です。
いつものように、例の完全なソースコードは、GitHubでから入手できます。