次のようなことができます。
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 と組み合わせて使用します。個人的には、列挙型のない名前付きフィールドがいくつかあるだけで、大きな価値があるとは思いません。
あなたが本当に欲しいのは、次のようなある種のアクションレジストリだと思います:
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);
}
実装は演習として残しました。