Является ли тело класса enum константным для определенного класса статическим или нестатичным?
У меня есть класс типа enum:
public enum Operation {
PLUS() {
@Override
double apply(double x, double y) {
// ERROR: Cannot make a static reference
// to the non-static method printMe()...
printMe(x);
return x + y;
}
};
private void printMe(double val) {
System.out.println("val = " + val);
}
abstract double apply(double x, double y);
}
Как вы видите выше, я определил одинenum
тип, который имеет значениеPLUS
, Он содержит константно-специфическое тело. В свое тело я попытался позвонитьprintMe(val);
, но я получил ошибку компиляции:
Невозможно сделать статическую ссылку на нестатический метод printMe ().
Почему я получаю эту ошибку? Я имею в виду, я переопределяю абстрактный метод вPLUS
тело. Почему это вstatic
объем? Как от этого избавиться?
Я знаю добавлениеstatic
ключевое слово наprintMe(){...}
решает проблему, но мне интересно знать, есть ли другой способ, если я хочу сохранитьprintMe()
нестатическая?
Другая проблема, очень похожая на описанную выше, но на этот раз сообщение об ошибке звучит наоборот, т.е.PLUS(){...}
имеет нестатический контекст:
public enum Operation {
PLUS() {
// ERROR: the field "name" can not be declared static
// in a non-static inner type.
protected static String name = "someone";
@Override
double apply(double x, double y) {
return x + y;
}
};
abstract double apply(double x, double y);
}
Я пытаюсь объявитьPLUS
-конкретныйstatic
переменная, но я получаю ошибку:
поле "имя" не может быть объявлено статическим в нестатическом внутреннем типе.
Почему я не могу определить статическую константу внутриPLUS
еслиPLUS
такое анонимный класс? Два сообщения об ошибках звучат противоречиво, как говорится в 1-м сообщении об ошибкеPLUS(){...}
имеетстатический контекст в то время как второе сообщение об ошибке говоритPLUS(){...}
имеетнестатическая контекст. Я еще больше запутался.