1. ホーム

[解決済み】静的なMapを初期化する方法は?

2022-03-23 19:16:51

質問

静的な Map をJavaで作成することはできますか?

方法1:静的な初期化子

方法2:インスタンスイニシャライザー(匿名サブクラス) または 他の方法ですか?

それぞれの長所と短所を教えてください。

2つの方法を説明する例を挙げます。

import java.util.HashMap;
import java.util.Map;

public class Test {
    private static final Map<Integer, String> myMap = new HashMap<>();
    static {
        myMap.put(1, "one");
        myMap.put(2, "two");
    }

    private static final Map<Integer, String> myMap2 = new HashMap<>(){
        {
            put(1, "one");
            put(2, "two");
        }
    };
}

解決方法は?

インスタンスイニシャライザーは、この場合、単なる構文上の糖分ですよね?初期化するためだけに余計な無名クラスが必要な理由がわからない。しかも、生成されるクラスがfinalだとうまくいかない。

静的な初期化子を使って、イミュータブルなマップを作ることもできます。

public class Test {
    private static final Map<Integer, String> myMap;
    static {
        Map<Integer, String> aMap = ....;
        aMap.put(1, "one");
        aMap.put(2, "two");
        myMap = Collections.unmodifiableMap(aMap);
    }
}