use*_*985 10 java enums static enum-map
我需要静态初始化 EnumMap。我知道两种方法。
使用Map的of()方法
private static final Map<<EnumKey>, <Value>> TEST_MAP = Map.of(ENUM_CONST1, "Value1", ENUM_CONST2, "Value2");
Run Code Online (Sandbox Code Playgroud)
使用双括号初始化
private static final Map<<EnumKey>, <Value>> TEST_MAP = new EnumMap<>(EnumKey.class) {
{
put(ENUM_CONST1, "Value1");
put(ENUM_CONST2, "Value2");
}
};
Run Code Online (Sandbox Code Playgroud)
还有其他更干净、更高效的方法吗?
Dun*_*ncG 15
Map.of设置 EnumMap 的一种巧妙方法是使用或定义所有内联值,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")
));
Run Code Online (Sandbox Code Playgroud)
如果想要公共访问,则包装为不可修改的 Map(由 EnumMap 支持)或直接传回Map.of(但不使用 EnumMap)。
public static final Map<YourEnum,String> C = Collections.unmodifiableMap(B);
Run Code Online (Sandbox Code Playgroud)