2017-06-02 15 views
0

Map型のフィールドを持つJavaでenumを作成する必要があります。マップフィールドを初期化するにはどうすればよいですか?匿名のオブジェクトを作成したり、Guava(または同様の)ライブラリを使用しない方法がありますか?マップでJavaのフィールドとしてenumを作成するにはどうすればよいですか?

public enum Day { 
    Sunday(new HashMap<>()); // TODO initialize the map 

    private Map<String, String> map; 

    Day(Map<String, String> paramMap) { 
    this.map.putAll(paramMap); 
    } 

    public getMap() {return map;} 
} 
+1

あなたはこの[例](https://codereview.stackexchange.com/questions/46175/java-enum-containing-a-hash-map-for-look-upを参照してくださいと仮定します) –

+0

@RajithPemabanduその例は少し異なります。私は、commongマップは必要ありませんが、それぞれのenum値ごとに異なるマップが必要です。 – wittyameta

答えて

1

マップのキーと値の両方がStringなので、あなたはコンストラクタが可変引数を取ると、それはあなたのためのマップを作成してみましょうことができます:

public enum Day { 
    SUNDAY("Foo", "Fooz", 
      "Bar", "Barz", 
      "Hello", "Hi"); 

    private final Map<String, String> map; 

    Day(String... keysAndValues) { 
     if ((keysAndValues.length & 1) != 0) 
      throw new IllegalArgumentException("keysAndValues has odd size: " + Arrays.toString(keysAndValues)); 
     this.map = new HashMap<>(); 
     for (int i = 0; i < keysAndValues.length; i += 2) { 
      if (keysAndValues[i] == null || keysAndValues[i + 1] == null) 
       throw new NullPointerException(); 
      if (this.map.put(keysAndValues[i], keysAndValues[i + 1]) != null) 
       throw new IllegalArgumentException("keysAndValues has duplicate key named '" + keysAndValues[i] + "': " + Arrays.toString(keysAndValues)); 
     } 
    } 

    public Map<String, String> getMap() { 
     return this.map; 
    } 

} 

あなたはSUNDAY用のマップを印刷する場合、例えばSystem.out.println(Day.SUNDAY.getMap())は、あなたが得る:

{Bar=Barz, Hello=Hi, Foo=Fooz} 
関連する問題