Константы перечисления должны быть первыми элементами в Перечислении. Версия вашего кода, которая компилируется:
class Foo {
public enum MyEnum {
MyEnumType, MyEnumType2;
public String bar() {
return MY_STRING;
}
public String bar2() {
return MY_STRING + "2";
}
private static final String MY_STRING = "a string I reuse in the enum";
}
}
* РЕДАКТИРОВАТЬ *
Исходя из изменений, внесенных в ваш первоначальный вопрос, я вижу, что вы пытаетесь сделать. Нет, невозможно использовать константы в ваших буквенных объявлениях enum, которые объявлены в самом определении enum. Это потому, что буквальные объявления ДОЛЖНЫ быть первыми элементами в перечислении. Это предусмотрено спецификацией языка Java. Две быстрые вещи:
- Вы используете
private static final Strings
. Это дает вам
абсолютно никакой пользы от использования строковых литералов вместо этого,
который решит проблему.
- Если вы хотите объявить константы многократного использования (
public static final
Strings
), вам нужно будет сделать это вне от перечисления.
В качестве альтернативы вы можете объявить свои Enums как вложенные элементы класса, который определяет для вас private static final String
.
Какой-то псевдокод:
public class Foo {
public static enum MyEnum {
MyEnumType(0, MY_STRING), MyEnumType2(1, "Hello");
private int ordinal;
private String value;
MyEnum(int ordinal, String value) {
this.ordinal = ordinal;
this.value = value;
}
public int getOrdinal() {
return ordinal;
}
public String getValue() {
return value;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
public void setValue(String value) {
this.value = value;
}
}
private static final String MY_STRING = "a string I reuse in the enum";
}