代码之家  ›  专栏  ›  技术社区  ›  James P. PachinSV

AbstractActions的枚举集包装器

  •  0
  • James P. PachinSV  · 技术社区  · 14 年前

    最初,我考虑的是一种动态枚举(参见 http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/ )但正如Java-Drinker在下面指出的那样,这是不必要的,因为操作保持不变。

    理想情况下,我想做的是一种包含 AbstractAction 可以启用/禁用并能够通过符号名称引用每个操作的实例。

    编辑:问题已重新制定。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Mark Peters    14 年前

    你可以这样做:

    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);
    }
    

    作为一种练习。