这不是一个被卡住的问题,而是我正在寻找一种整洁的方式来编写我的代码。在枚举中枚举
本质上,我正在编写一个事件驱动的应用程序。用户触发事件,事件被发送到适当的对象,并且对象处理事件。现在我正在编写偶处理程序方法,并且希望能够使用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;
}
}
我会像做的就是这样的事情(尽管我当然会坚持开关语句转换成自己的职能,以避免它变成开关和案例讨厌的毛球):
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语句。希望有更好的办法! (哦,和性能事关我的情况下,如果有帮助)
我不会用枚举来描述你的事件。枚举最适合可数且不变的状态。上,下,左,右是好的,因为他们不太可能改变。 MOVE,FOO,BAR觉得应该很容易添加。相反,我会使用多态。 (每个事件实现一个doSomething以获得游戏状态)。 – ILMTitan 2012-01-04 20:14:02