web-dev-qa-db-ja.com

Java列挙型で静的定数を定義するには?

Java enum宣言で静的な最終変数(事実上定数)を定義する方法はありますか?

私が欲しいのは、BAR(1 ... n)値の文字列リテラル値を1か所で定義することです。

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

上記のコードについて次のエラーメッセージが表示されました:定義される前にフィールドを参照できません

43
jilt3d

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