如何在Java枚举中定义静态常量?

2022-08-31 13:11:48

有没有办法在Java枚举声明中定义静态最终变量(实际上是常量)?

我想要的是在一个地方定义BAR(1...n)值的字符串文本值:

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

我收到上述代码的以下错误消息:在定义字段之前无法引用字段


答案 1

正如IntelliJ IDEA在提取常量时所建议的那样 - 创建静态嵌套类。此方法有效:

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

答案 2
public enum MyEnum {
    BAR1(MyEnum.BAR_VALUE);

    public static final String BAR_VALUE = "Bar";

工作正常


推荐