Ответ 1
Константы перечисления должны быть первыми элементами в перечислении. Версия вашего кода, который компилируется:
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, которые объявлены в самом определении перечисления. Это потому, что литералы должны быть первыми элементами в перечислении. Это предусмотрено спецификацией Java Language Specification. Две быстрых вещи:
- Вы используете
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";
}