0

実行時に一連の Swing アクションをコンテナにロードし、Enum で可能な定数名でアクセスしたいと考えています。これの目的は、可能なアクションを制限し、読みやすさを向上させることです。

当初、私は一種の動的列挙型を検討していました ( http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/を参照)。変わらないまま。

理想的には、私がやりたいことは、AbstractAction有効/無効にでき、シンボリック名を介して各アクションを参照できるインスタンスを含む一種のラッパーです。

編集:質問が再定式化されました。

4

1 に答える 1

2

次のようなことができます。

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

実装は演習として残しました。

于 2010-08-17T20:51:44.017 に答える