2
我有一個Java靜態HashMap字段的非靜態類。散列映射應該使用代碼生成的一些鍵值對進行初始化。之後,hashmap不會被改變。在Java中初始化HashMap的好設計模式選擇
這應該如何實現?我應該創建一個靜態初始化方法,並確保在使用該類之前運行一次,或者有更好的方法來實現它嗎?
我有一個Java靜態HashMap字段的非靜態類。散列映射應該使用代碼生成的一些鍵值對進行初始化。之後,hashmap不會被改變。在Java中初始化HashMap的好設計模式選擇
這應該如何實現?我應該創建一個靜態初始化方法,並確保在使用該類之前運行一次,或者有更好的方法來實現它嗎?
你可以在你的類中使用靜態初始化塊。
例如
private static Map<String, String> myMap;
static {
HashMap<String,String> map = new HashMap<String,String>();
map.put("foo","bar");
myMap = Collections.unmodifiableMap(map);
}
您可以輕鬆創建與谷歌番石榴庫一成不變的地圖:
private static Map<String, String> map = ImmutableMap.of(
"key1", "value1",
"key2", "value2");
如果你想使用它的許多值,那麼builder()
提供。
「map」變量的類型應該是Map,而不是HashMap。 – VGR
@VGR「應該」在這裏是一個強有力的詞,因爲在上面的代碼中改變它沒有切實的價值。雖然沒有真正的反對意見,但會節省一些關鍵筆劃。類成員變量適當地是一個'Map',它只是被聲明爲'HashMap'的短期塊範圍'map'變量。 –