プログラマってこんなかんじ??

アプリ作ったり歌ったりしてます

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
コンストラクタ

こんな順番になる。