1.概要

このクイックチュートリアルでは、ほとんどの

List

実装のAPI(

UnsupportedOperationException

)を扱うときに発生する可能性がある一般的な

Exception

について説明します。


java.util.List

は、通常のa

__rray


がサポートできる以上の機能を持っています。たとえば、1つの組み込みメソッド呼び出しだけで、特定の要素が構造体内にあるかどうかを確認することができます。通常、

array



List

または

Collection__に変換する必要があるのはそのためです。

コアとなるJavaの

List

実装 –

ArrayList

– の紹介については、link:/java-arraylistを参照してください。

2.

UnsupportedOperationException

このエラーが頻繁に発生する方法は、

java.util.Arraysの

asList()__メソッドを使用する場合です。

public static List asList(T... a)

それは戻ります:

  • ** 与えられた

    array

    のサイズとしての固定サイズの

    List

  • 元の

    array

    の要素と同じ型の要素


Object

でなければなりません
元の配列と同じ順序の


要素



  • 直列化可能なリスト



RandomAccess


を実装します。

Tはリンク:/java-varargs[

varargs

]なので、配列または項目をパラメータとして直接渡すことができ、メソッドは固定サイズの初期化リストを作成します。

List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

実際の

array

を渡すこともできます。

String[]flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);

  • 返される

    List

    は固定サイズの

    List

    なので、要素を追加/削除することはできません** 。

さらに要素を追加しようとすると、

UnsupportedOperationException

が発生します。

String[]flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");

この

Exception

の根本は、返されるオブジェクトが

java.util.ArrayList.

と同じではないため、

__add()

__操作を実装していないことです

  • これは

    java.util.Arraysの

    ArrayList__です。

同じ例外を取得するもう1つの方法は、取得リストから要素を削除しようとすることです。

一方、必要に応じて可変の

List

を取得する方法があります。

そのうちの1つは、

asList()

の結果から

ArrayList

または任意の種類のリストを直接作成することです。

String[]flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));

3.まとめ

結論として、リストに要素を追加すると、不変リストだけでなく問題が発生する可能性があることを理解することが重要です。

いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[GitHubで利用可能]です。