コレクションを初期化する
匿名クラスと初期化ブロックの構文を利用することで、インスタンス化に際してまとめて配下の要素をセットできます。
CollInit.java
package com.example.mynavi.collection; import java.util.ArrayList; import java.util.List; public class CollInit { public static void main(String[] args) { List<String> list = new ArrayList<String>() { { add("Windows"); add("Linux"); add("macOS"); } }; System.out.println(list); // 結果:[Windows, Linux, macOS] } }
外枠の{…}が匿名クラスを表す定義ブロック、内側の{…}が初期化ブロックを意味します。匿名クラスの配下ではコンストラクターを指定することはできませんので、初期化ブロックでaddメソッドを呼び出し、オブジェクトを追加しています。
ダイアモンド構文
JavaSE 7以降では、ダイヤモンド構文が導入され、右辺の要素型(<...>の中身)を省略できるようになりました(左辺で要素型は明らかなためです)。よって、以下の文は同じ意味です。
List<String> list = new ArrayList<String>(); List<String> list = new ArrayList<>();
冗長な構文をあえて利用する意味はありませんので、JavaSE 7以降の環境ではダイヤモンド構文を積極的に利用していきましょう。