Как определить статические константы в перечислении 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;
}
У меня появилось следующее сообщение об ошибке для кода выше: Нельзя ссылаться на поле до его определения.
Ответы
Ответ 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;
(Вы можете поместить это в класс или нет, имеет ли это смысл для вас)