Mapの初期化
Mapの初期化をするとき、いままでこんなかんじでstaticブロックでやってたり。
private static Map<String, String> map = new HashMap<String, String>(); static { map.put("key", "val"); }
んで、今日こんな方法もあるよー、と id:yone098 に教えていただいた。
private static Map<String, String> map = new HashMap<String, String>() { { put("key", "val"); } };
無名クラス初期化子を使うこの方法。こっちのほうがわかりやすい。
追記
「無名クラスじゃないよ!」という指摘をさっそく @hsmt からいただきまして。実行順番がよくわからなくなったので実験。
public InitializeTest() { System.out.println("コンストラクタ"); } static { System.out.println("static"); } { System.out.println("instance"); } private Map<String, String> map = new HashMap<String, String>() { { System.out.println("map"); } }; private static Map<String, String> staticMap = new HashMap<String, String>() { { System.out.println("static map"); } }; public static void main(String[] args) { new InitializeTest(); }
実行。
static static map instance map コンストラクタ
こんな順番になる。