Оболочка Enumset для AbstractActions - PullRequest
0 голосов
/ 18 августа 2010

Я хотел бы загрузить серию Swing Actions в контейнер во время выполнения и обращаться к ним по постоянному имени, как это возможно с помощью Enum. Цель этого состоит в том, чтобы как ограничить возможные действия, так и улучшить читаемость.

Изначально я рассматривал своего рода динамическое перечисление (см. http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/), но, как указывает Java Drinker ниже, это не нужно, поскольку действия остаются неизменными.

В идеале, я хотел бы сделать что-то вроде оболочки, которая содержит AbstractAction экземпляров, которые можно включать / отключать и которые могут ссылаться на каждое действие через символическое имя.

Редактировать: вопрос был переформулирован.

1 Ответ

2 голосов
/ 18 августа 2010

Вы можете сделать что-то вроде этого:

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...;

И затем, как говорили другие, используйте enum в сочетании с EnumSet или EnumMap.Лично я не вижу в этом огромной ценности, если просто иметь несколько именованных полей без перечисления.

Я думаю, что вы действительно хотите, это какой-нибудь реестр действий, подобный этому:

Реализация оставлена ​​как упражнение.

...