你可以这样做:
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...;
然后正如其他人所说,将枚举与 EnumSet 或 EnumMap 结合使用。就我个人而言,我认为仅仅拥有几个没有枚举的命名字段并没有太大的价值。
我认为您真正想要的是某种 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);
}
实施留作练习。