Дело не в том, что я застрял, а скорее в поиске аккуратного способа написания своего кода.
По сути, я пишу приложение, управляемое событиями.Пользователь инициирует событие, событие отправляется соответствующим объектам, и объекты обрабатывают события.Сейчас я работаю над написанием методов четного обработчика, и я надеялся использовать операторы switch, чтобы определить, как обрабатывать событие.Прямо сейчас, пока я работаю над общей структурой, класс событий действительно прост:
public class Event {
public static enum Action {
MOVE, FOO, BAR
}
private Action action;
private int duration;
public Event(Action action, int duration) {
this.action = action;
this.duration = duration;
}
public Action getAction() {
return action;
}
public int getDuration() {
return duration;
}
Затем в другом классе у меня будет что-то вроде:
public void handleEvent(Event evt) {
switch(Event.getAction()) {
case MOVE: doSomething(); break;
case FOO: doSomething(); break;
case BAR: doSomething(); break;
default: break;
}
}
хотелось бы сделать что-то вроде этого (хотя я бы, конечно, вставил операторы switch в их собственные функции, чтобы избежать превращения в неприятный комок из переключателей и кейсов):
public void handleEvent(Event evt) {
switch(Event.getAction()) {
case MOVE: switch(Event.getAction()) {
case UP: break;
case DOWN: break;
case LEFT: break;
case RIGHT: break;
}
case FOO: break;
case BAR: break;
default: break;
}
}
Итак, я бы хотел создать вложенные перечисления ... вот так:
public static enum Action {
public enum MOVE {UP, DOWN, LEFT, RIGHT}, FOO, BAR
}
Не то, чтобы я не мог избежать сценария, это было бы просто ... удобно.Итак, хотя вышесказанное на самом деле не работает, есть ли подобный метод для достижения этой цели?Было бы неплохо, если бы я мог отправить событие с действием «MOVE.UP», и метод сначала идентифицировал бы его как действие типа MOVE, а затем дополнительно определил, что оно конкретно в направлении UP.Это просто простой пример, было бы здорово, если бы я мог также создавать более длинные цепочки, что-то вроде «DELETE.PAGE1.PARAGRAPH2.SENTENCE2.WORD11.LETTER3».На мой взгляд, мне просто нужно использовать строки и множество операторов if / else.Надеюсь, есть лучший способ!(Да, и производительность имеет значение в моем случае, если это поможет)