java.util.Listオブジェクトの初期化方法いろいろです。
addメソッドを使って初期化
基本ですね。初期化する要素ごとにListインターフェースのaddメソッドを使用して初期化します。
List<String> fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("orange"); fruits.add("grape");
Arrays.asListを使って初期化
ArraysクラスのasListメソッドを使用して初期化します。コードがシンプルになります。
List<String> fruits = Arrays.asList("apple", "orange", "grape");
この方法は注意が必要です。生成されるListの実装クラスはjava.util.Arraysの内部クラスArrayListになります。java.util.ArrayListとは別物です。そして、生成されたListオブジェクトは変更不可能になるので、Listの内容を変更すると、例外UnsupportedOperationExceptionが発生します。
初期化後にListオブジェクトの内容を変更する場合、以下のようにListの実装クラスをnewして、引数にArrays.asListで生成したListを指定します。
List<String> fruits = new ArrayList<>(Arrays.asList("apple", "orange", "grape"));
インスタンスイニシャライザを使って初期化
あまり知られていませんが、インスタンスイニシャライザというものを使うことで初期化コードを書くことができます。
インスタンスイニシャライザ内でaddメソッドを使用して初期化します。
いくつか注意点があります。
- addメソッドを使うときに、オブジェクトは指定せず、単に「add("~")」と記述します。
- ArrayListは、Serializableインターフェースを実装しているので、シリアルバージョンIDを定義しないと、IDE上で警告が表示されます。
List<String> fruits = new ArrayList<>() { private static final long serialVersionUID = 1L; { add("apple"); add("orange"); add("grape"); } };
利点が少ないので、この記法をとることは少ないでしょう。
List.ofを使って初期化
Java9で追加されたListインターフェースのofメソッドを使用して初期化します。Arrays.asListと同様、コードがシンプルになります。
List<String> fruits = List.of("apple", "orange", "grape");
この初期化方法も、Arrays.asListと同様、変更不可能なListが生成されるので、変更する場合は、実装クラスのインスタンスを生成して、引数にList.ofメソッドで生成したListオブジェクトを指定します。
Java9以降のバージョンであれば、Arrays.asListより、こちらのList.ofのほうが同じListインターフェースを使っているので、見た目が良いですね。