Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I need to statically initialize an EnumMap. I know two ways.

  1. Using of() method of Map

    private static final Map<<EnumKey>, <Value>> TEST_MAP = Map.of(ENUM_CONST1, "Value1", ENUM_CONST2, "Value2");
    
  2. Using double brace initialization

    private static final Map<<EnumKey>, <Value>> TEST_MAP = new EnumMap<>(EnumKey.class) {
        {
            put(ENUM_CONST1, "Value1");
            put(ENUM_CONST2, "Value2");
         }
    };
    

Is there any other cleaner and more efficient way?

like image 933
javaguy Avatar asked Jan 24 '26 08:01

javaguy


1 Answers

A neat way to setup EnumMap is to define all the values in-line using Map.of or Map.ofEntries but note that this allocates a Map before the EnumMap constructor:

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")
));

If wanting public access then wrap as unmodifiable Map (which is backed by EnumMap) or just pass back Map.of directly (but is not using an EnumMap).

public static final Map<YourEnum,String> C = Collections.unmodifiableMap(B);
like image 102
DuncG Avatar answered Jan 26 '26 21:01

DuncG



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!