我有一个要求在Java中嵌套枚举。不过,在Stackoverflow和更大的Web上寻找时,我发现似乎没有关于嵌套枚举的通用约定。我见过很多不同的解释,但没有符合我的需要。嵌套树结构像Java中的枚举 - 对通常嵌套枚举Q和As的不同看法
现在让我们来讨论我的要求开始:
我需要枚举允许的命名约定,在我的Java应用程序的事件类型简单的树型结构。例如
Event.Draw.Square;
Event.Draw.Circle;
Event.Draw.Triangle;
Event.Draw.Poly;
Event.Draw.Line;
Event.File.Load;
Event.File.Save;
Event.Screen.Zoom;
Event.Screen.Flip;
Event.Ui.New;
Event.Ui.Close;
我如何设想这在代码将是以下,但显然它不正确。任何指针如何获得这与枚举?
private enum event
{
Draw {Square, Circle, Triangle, Poly, Line},
File {Save, Save_As, Load},
Screen {Zoom, Flip, Rotate_CW, Rotate_CCW},
Ui {New_Workspace, Close}
}
然后,我想要一个case语句或条件结构能够说事Event.Screen,或Event.Screen.Zoom。以下列方法为例:
public void evenTriggered(Event event)
{
switch (event)
{
case Event.Draw:
drawEvent(event.Draw);
case Event.UI:
uiEvent(event.Ui);
case Event.Screen:
screenEvent(event.Screen);
case Event.File
fileEvent(event.File);
default: ;//do nothing
}//end switch
}//end eventTriggered
public void drawEvent(Event.Draw event)
{
switch(event.draw)
{
case Event.Draw.Square:
workspace.addSquare();
break;
case Event.Draw.Circle:
workspace.addCircle();
break;
case Event.Draw.Triange:
workspace.addTriangle();
break;
default: ;//do nothing
};//end switch
}//end drawEvent
感谢您花时间阅读我的文章,我期待您的建议。
Andrew。
我想集中的事件在我的应用程序处理。所以UI的所有部分都是松散耦合的。这将使类能够将一个调用传递给事件处理程序suh,如:eventH.fireEvent(Event.draw.circle);然后,我可以记录日志,并将用户的交互存储在类别中以供日后数据挖掘。 – 2012-04-18 22:05:46
那又如何避免你说'eventH.fireEvent(new DrawEvent(DrawEventType.Circle))'? – MarioDS 2012-04-18 22:11:38
我想在应用程序中集中事件处理。所以UI的所有部分都是松散耦合的。 UI元素只能通过Singleton事件处理程序类来耦合。这将使类能够将一个调用传递给事件处理程序suh,如:eventH.fireEvent(Event.draw.circle)。 UI组件中的监听器然后可以在偶数处理器中注册所有EventDraw类型或Event.File的事件。我不认为这是一个反OO的想法,使用逻辑明确的枚举也是。 – 2012-04-18 22:11:40