2016-03-03 178 views
2

我有這個類,我想知道:
1°這是定義一個靜態HashMasp
2°的最佳途徑這是做在Spring基於應用程序的最佳方式(呢?春季提供更好的方法來做到這一點?)
靜態HashMap的初始化

在此先感謝!

public class MyHashMap { 
     private static final Map<Integer, String> myMap; 
     static { 
      Map<CustomEnum, String> aMap = new HashMap<CustomEnum, String>(); 
      aMap.put(CustomEnum.UN, "one"); 
      aMap.put(CustomEnum.DEUX, "two"); 
      myMap = Collections.unmodifiableMap(aMap); 
     } 

     public static String getValue(CustomEnum id){ 
      return myMap.get(id); 
     } 
    } 


    System.out.println(MyHashMap.getValue(CustomEnum.UN)); 
+0

1)是絕對 –

+1

從java 9開始,您可以用類似Arrays.asList的方式創建地圖,這樣可以避免靜態地塊。試圖找到我已經閱讀的地方...... –

+0

你去... ['Map.ofEntries'](http://download.java.net/jdk9/docs/api/java/util/Map。 html#ofEntries-java.util.Map.Entry ...-)和['Map.of(...)'](http://download.java.net/jdk9/docs/api/java/util/ Map.html#的-KVKVKVKVKVKVKVKVKVKV-)。 –

回答

1

有幾種方法可以做到這一點。例如,如果你的地圖是不可變的,你可以考慮使用Google Guava libraries 它有可能是被用來構建地圖的ImmutableMap類: -

static final ImmutableMap<String, Integer> WORD_TO_INT = 
     new ImmutableMap.Builder<String, Integer>() 
      .put("one", 1) 
      .put("two", 2) 
      .put("three", 3) 
      .build(); 

如果您已經使用Spring Framework和接線您豆類使用XML ,那麼你可以通過XML直接填入地圖: -

...  
<!-- creates a java.util.Map instance with the supplied key-value pairs --> 
<util:map id="emails"> 
    <entry key="pechorin" value="[email protected]"/> 
    <entry key="raskolnikov" value="[email protected]"/> 
    <entry key="stavrogin" value="[email protected]"/> 
    <entry key="porfiry" value="[email protected]"/> 
</util:map> 
    ... 
0

要麼你可以使用番石榴圖書館。但是,如果你不想使用第三方庫,那麼有兩種方法來做到這一點:

  1. 靜態初始化

    private static final Map<String,String> myMap = new HashMap<String, String>(); 
    static { 
        myMap.put(key1, value1); 
        myMap.put(key2, value2); 
    } 
    
    public static Map getMap() { 
        return Collections.unmodifiableMap(myMap); 
    } 
    
  2. 實例初始化器(匿名子類)。

    private static final Map<String,String> myMap = new HashMap<String, String>() 
    { 
        { 
        put(key1, value1); 
        put(key2, value2); 
        } 
    }; 
    
    public static Map getMap() { 
        return Collections.unmodifiableMap(myMap); 
    } 
    
    private static void addPair(String key, String val){ 
        // Add key val to map 
    } 
    

以後假設你想添加一些常量來圖,那麼你就可以做到這一點爲好。

Collections.unmodifiableMap:它有助於有一個不可修改的地圖視圖,這是無法修改的。由於它提供不受支持的異常,如果對映射進行了任何修改。