2017-05-05 100 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()提供。