我想在运行时加载一系列的摆动操作到一个容器中,并通过枚举尽可能通过常数名称访问它们。这样做的目的是既限制可能的动作,也可以提高可读性。

最初,我正在考虑一种动态枚举(请参阅 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);
}

实施作为练习。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top