web-dev-qa-db-fra.com

Comment définir des constantes statiques dans une énumération Java?

Existe-t-il un moyen de définir des variables finales statiques (effectivement des constantes) dans une déclaration d'énumération Java?

Ce que je veux, c'est définir en un seul endroit la valeur littérale de la chaîne pour les valeurs 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;
}

J'ai reçu le message d'erreur suivant pour le code ci-dessus: Impossible de référencer un champ avant qu'il ne soit défini.

43
jilt3d

Comme IntelliJ IDEA suggère lors de l'extraction constante - créer une classe interne statique. Cette approche fonctionne:

@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