在 Java 中静态初始化 EnumMap 的最佳方法是什么
What is the best way to statically initialize an EnumMap in Java
我需要静态初始化一个 EnumMap.I 知道两种方法。
- 使用Map的of()方法
<pre><code>private static final Map<<EnumKey>, <Value>> TEST_MAP = Map.of(ENUM_CONST1, "Value1", ENUM_CONST2, "Value2");
- 使用双括号初始化
<pre><code>private static final Map<<EnumKey>, <Value>> TEST_MAP = new EnumMap<>(EnumKey.class) {
{
put(ENUM_CONST1, "Value1");
put(ENUM_CONST2, "Value2");
}
};
有没有其他更干净高效的方式?
在静态块中执行:
private static final EnumMap<....> yourMap = ...
static {
yourMap.put(....);
yourMap.put(....)
}
通过 Constant Dynamic
.
将有一些不同的方法(但 API 中尚不存在)
用一种方法来做:
private static final EnumMap<....> yourMap = yourMapMethod();
private static EnumMap<....> yourMapMethod() {
EnumMap<....> yourMap = ...
yourMap.put(....);
yourMap.put(....);
return yourMap;
}
设置 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")
));
如果想要 public 访问,则包装为不可修改的 Map(由 EnumMap 支持)或直接传回 Map.of
(但不使用 EnumMap)。
public static final Map<YourEnum,String> C = Collections.unmodifiableMap(B);
我需要静态初始化一个 EnumMap.I 知道两种方法。
- 使用Map的of()方法
<pre><code>private static final Map<<EnumKey>, <Value>> TEST_MAP = Map.of(ENUM_CONST1, "Value1", ENUM_CONST2, "Value2");
- 使用双括号初始化
<pre><code>private static final Map<<EnumKey>, <Value>> TEST_MAP = new EnumMap<>(EnumKey.class) {
{
put(ENUM_CONST1, "Value1");
put(ENUM_CONST2, "Value2");
}
};
有没有其他更干净高效的方式?
在静态块中执行:
private static final EnumMap<....> yourMap = ...
static {
yourMap.put(....);
yourMap.put(....)
}
通过 Constant Dynamic
.
用一种方法来做:
private static final EnumMap<....> yourMap = yourMapMethod();
private static EnumMap<....> yourMapMethod() {
EnumMap<....> yourMap = ...
yourMap.put(....);
yourMap.put(....);
return yourMap;
}
设置 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")
));
如果想要 public 访问,则包装为不可修改的 Map(由 EnumMap 支持)或直接传回 Map.of
(但不使用 EnumMap)。
public static final Map<YourEnum,String> C = Collections.unmodifiableMap(B);