1

我需要静态初始化一个 EnumMap。我知道两种方法。

  1. Map的of()方法的使用
private static final Map<<EnumKey>, <Value>> TEST_MAP = Map.of(ENUM_CONST1, "Value1", ENUM_CONST2, "Value2");
  1. 使用双括号初始化
private static final Map<<EnumKey>, <Value>> TEST_MAP = new EnumMap<>(EnumKey.class) {
    {
        put(ENUM_CONST1, "Value1");
        put(ENUM_CONST2, "Value2");
     }
};

还有其他更清洁、更有效的方法吗?

4

3 回答 3

2

设置 EnumMap 的一种简洁方法是使用Map.of或定义所有值,Map.ofEntries但请注意,这会在 EnumMap 构造函数之前分配一个 Map:

private static final EnumMap<YourEnum,String> A = new EnumMap<>(Map.of(
        YourEnum.ONE, "Value1",
        YourEnum.TWO, "Value2"
));

// Use Map.ofEntries for enums with more than 10 values:
private static final EnumMap<YourEnum,String> B = new EnumMap<>(Map.ofEntries(
        Map.entry(YourEnum.ONE, "Value1"),
        Map.entry(YourEnum.TWO, "Value2")
));

如果想要公共访问,则包装为不可修改的 Map(由 EnumMap 支持)或直接传回Map.of(但不使用 EnumMap)。

public static final Map<YourEnum,String> C = Collections.unmodifiableMap(B);
于 2021-05-20T11:48:40.640 回答
2

在静态块中执行此操作:

private static final EnumMap<....> yourMap = ...

static {
   yourMap.put(....);
   yourMap.put(....)
}

将有一些方法可以完全不同(但它们在 API 中尚不存在),通过Constant Dynamic.

于 2021-05-19T16:46:34.910 回答
1

在一个方法中做到这一点:

private static final EnumMap<....> yourMap = yourMapMethod();

private static EnumMap<....> yourMapMethod() {
   EnumMap<....> yourMap = ...
   yourMap.put(....);
   yourMap.put(....);
   return yourMap;
}
于 2021-05-19T17:28:30.237 回答