JavaコレクションやネストしたGUIコンポーネントを、1論理行っぽく初期化する方法。Double Brace Initializationイディオム(2重ブレース初期化)とも呼ばれる。
List<String> list = new ArrayList<String>() {{ add("foo"); add("bar"); add("zot"); }};
add(new JPanel() {{ setLayout(...); setBorder(...); add(new JLabel(...)); add(new JSpinner(...)); }});
構文的には外側ブレースが匿名クラス(anonymous class)宣言に、内側ブレースがそのインスタンス初期化子(instance initializer)になっている。濫用すると Foo$1.class などの内部クラスファイルが大量生成されるので注意。また別クラスに分離されることで、JVMクラスローダ処理などパフォーマンス上のペナルティを受ける。
リスト初期化程度であればjava.util.Arrays
クラスの利用を検討すべき。
// 固定サイズリスト List<String> list = Arrays.asList("foo", "bar", "baz"); // サイズ変更可能なリスト List<String> list = new ArrayList<>(Arrays.asList("foo", "bar", "baz"));
関連URL