Как вызвать Enum отдельными методами?
У меня есть перечисление, которое может выглядеть так, как показано ниже. Моя цель - иметьenum
с некоторыми распространенными методами (я применил это путем добавления абстрактного метода) и некоторыми методами «enum value Individual».
Следующий код компилируется:
public enum MyEnum {
VALUE {
@Override
public void syso() {
System.out.println("VALUE syso");
}
},
SPECIAL_VALUE {
@Override
public void syso() {
System.out.println("SPECIAL_VALUE syso");
}
public void sayHello() {
System.out.println("Hello");
}
};
public abstract void syso();
public static void main(String... args) {
MyEnum.VALUE.syso();
MyEnum.SPECIAL_VALUE.syso();
}
}
Запуск этого приводит к печати следующего:
VALUE syso
SPECIAL_VALUE syso
Однако пытается позвонитьsayHello()
, который я определил вSPECIAL_VALUE
, не работает.
Добавление следующего к основному методу больше не компилируется:
public static void main(String... args) {
MyEnum.SPECIAL_VALUE.sayHello(); // does not work
}
Это почему? Мне кажется, это совершенно нормально, но метод не может быть найден. Есть ли способ вызвать этот метод? Может быть, с помощью отражения?
Я также хотел бы не делать этот метод абстрактным, потому что он не имеет смысла для любых других значений перечисления. Я тоже не могуextend
перечислите и добавьте этот специальный метод, наследуя при этом общие. Я также хотел бы избежать добавления какого-либо синглтон-класса для «симуляции» этого.
Можно ли как-нибудь запустить это? Если нет, то что будет моей лучшей альтернативой?