
在实际开发中,我们往往需要定义和初始化一些常量 Map,普通的做法一般是在 static 代码块中初始化:
1 | public static Map<String, Integer> STATIC_MAP = new HashMap<>(); |
这种方式只是创建一个初始化好的 map,但这个 map 是有可能被别人修改的,达不到不可变的要求。
Guava 提供了 ImmutableMap 类用于创建不可变的 Map,用法如下:
1 | public static final Map<String, Integer> STATIC_MAP = new ImmutableMap.Builder<String, Integer>() |
它是不可变的,当我们调用 put 方法时,会抛出 UnsupportedOperationException 异常:
1 | Exception in thread "main" java.lang.UnsupportedOperationException |
因为 ImmutableMap 重写了 Map 的 put 方法,直接抛异常:
1 |
|
除了通过 build 方式创建,ImmutableMap 还提供了一些更方便的 api 创建 Map:
1 | public static <K, V> ImmutableMap<K, V> of(K k1, V v1); |
【附】Guava 的 Maven 依赖:
1 | <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> |