2017-05-05 79 views
2

我有一個Java靜態HashMap字段的非靜態類。散列映射應該使用代碼生成的一些鍵值對進行初始化。之後,hashmap不會被改變。在Java中初始化HashMap的好設計模式選擇

這應該如何實現?我應該創建一個靜態初始化方法,並確保在使用該類之前運行一次,或者有更好的方法來實現它嗎?

回答

5

你可以在你的類中使用靜態初始化塊。

例如

private static Map<String, String> myMap; 
static { 
    HashMap<String,String> map = new HashMap<String,String>(); 
    map.put("foo","bar"); 

    myMap = Collections.unmodifiableMap(map); 
} 
+0

「map」變量的類型應該是Map,而不是HashMap。 – VGR

+0

@VGR「應該」在這裏是一個強有力的詞,因爲在上面的代碼中改變它沒有切實的價值。雖然沒有真正的反對意見,但會節省一些關鍵筆劃。類成員變量適當地是一個'Map',它只是被聲明爲'HashMap'的短期塊範圍'map'變量。 –

0

您可以輕鬆創建與谷歌番石榴庫一成不變的地圖:

private static Map<String, String> map = ImmutableMap.of(
    "key1", "value1", 
    "key2", "value2"); 

如果你想使用它的許多值,那麼builder()提供。