枚举包装器用于抽象的包装器
-
29-09-2019 - |
题
我想在运行时加载一系列的摆动操作到一个容器中,并通过枚举尽可能通过常数名称访问它们。这样做的目的是既限制可能的动作,也可以提高可读性。
最初,我正在考虑一种动态枚举(请参阅 http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/)但是,正如爪哇饮酒者在此下方指出的那样,这是不必要的,因为这些动作保持不变。
理想情况下,我想做的是一种包装器 AbstractAction
可以启用/禁用的实例,并能够通过符号名称参考每个操作。
编辑:问题已经重新制定。
解决方案
您可以做这样的事情:
public enum Actions {
COPY( new AbstractAction() {
public void actionPerformed(ActionEvent e) {
//do something
}
}),
PASTE( new PasteAction() );
public final AbstractAction action;
private Actions(AbstractAction action) {
this.action = action;
}
}
//...
Actions.COPY.action...;
然后正如其他人所说的那样,将枚举与枚举或枚举结合使用。就我个人而言,我认为只有几个没有枚举的命名字段就没有巨大的价值。
我认为您真正想要的是这样的行动注册表:
public class ActionsManager {
private final Map<String, Action> actions;
private final Map<User, Set<String>> enabledActions;
public Action get(String id);
public void register(String id, Action action);
public void deregister(String id);
public boolean isEnabled(User user, Action action);
}
实施作为练习。
不隶属于 StackOverflow