簡體   English   中英

在 Java 中靜態初始化 EnumMap 的最佳方法是什么

[英]What is the best way to statically initialize an EnumMap in Java

我需要靜態初始化一個 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"); } };

還有其他更清潔、更有效的方法嗎?

設置 EnumMap 的一種巧妙方法是使用Map.ofMap.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);

在 static 塊中執行此操作:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM