Search code examples
javaenumsconstants

How to define static constants in a Java enum?


Is there any way to define static final variables (effectively constants) in a Java enum declaration?

What I want is to define in one place the string literal value for the BAR(1...n) values:

@RequiredArgsConstructor
public enum MyEnum {
    BAR1(BAR_VALUE),
    FOO("Foo"),
    BAR2(BAR_VALUE),
    ...,
    BARn(BAR_VALUE);

    private static final String BAR_VALUE = "Bar";

    @Getter
    private final String value;
}

I got the following error message for the code above: Cannot reference a field before it is defined.


Solution

  • As IntelliJ IDEA suggest when extracting constant - make static nested class. This approach works:

    @RequiredArgsConstructor
    public enum MyEnum {
        BAR1(Constants.BAR_VALUE),
        FOO("Foo"),
        BAR2(Constants.BAR_VALUE),
        ...,
        BARn(Constants.BAR_VALUE);
    
    
    
        @Getter
        private final String value;
    
        private static class Constants {
            public static final String BAR_VALUE = "BAR";
        }
    }