我并不是卡住了,而是想找一种简洁的方式来编写我的代码。
基本上,我正在编写一个事件驱动的应用程序。用户触发事件,事件被发送到相应的对象,然后对象处理事件。现在我正在编写事件处理方法,并希望使用 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语句。希望有更好的方法!(哦,还有,性能在我的情况下很重要,如果这有助于的话)