Подтвердить что ты не робот

Как определить статические константы в перечислении Java?

Есть ли способ определить статические конечные переменные (эффективные константы) в декларации перечисления 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;
}

У меня появилось следующее сообщение об ошибке для кода выше: Нельзя ссылаться на поле до его определения.

4b9b3361

Ответ 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

Возможно, вам стоит рассмотреть возможность разбиения этого enum на два поля: enum и int:

@RequiredArgsConstructor
public enum MyEnum {
    BAR("Bar"),
    FOO("Foo")

    @Getter
    private final String value;
}

И затем используйте:

private MyEnum type;
private int value;

(Вы можете поместить это в класс или нет, имеет ли это смысл для вас)