Встроенный экземплярный класс как параметр в Enum - PullRequest
1 голос
/ 31 марта 2012

Я новичок в программировании на Java и пытаюсь научиться этому. Я столкнулся с проблемой, которая не может найти решение в Интернете:

У меня есть enum, то есть «список» действий, и у каждого из них есть свойство типа Действия, который содержит список возможных вложений. Субасионами являются константа.

Я бы хотел создать экземпляр anonymus для Actions в конструкторе enum, чтобы в дополнение к стандартным вложенным операциям каждое перечисление может иметь свои вложенные операции

Я пытался написать перечисление, подобное следующему

public enum Action {
    ACTION1("One", new Actions(){
        public static final String TEST = "test";
    }),
    ACTION2("TWO", null),
    ACTION3("THREE,null);

    private final String act;
    public final Actions actions;

    private Action(String act, Actions actions) {
        this.act = act;
        this.actions = actions;
    }
}

и это класс действий

public class Actions {
    public static final String SUBACTION_TEST1 = "suoOne";
    public static final String SUBACTION_TEST2 = "subTwo";
}

чем, вот как я использую перечисление Action:

String as = Action.ACTION1.params.SUBACTION_TEST1;

и до сих пор это плохо, но я не могу написать это:

String ast = Action.ACTION1.params.TEST;

Я знаю, что, вероятно, этот подход неправильный, но до изменения реализации Я хотел бы знать, почему не работает.

Спасибо.

1 Ответ

3 голосов
/ 31 марта 2012

Ваше перечисление не имеет свойства с именем params, что является непосредственной причиной того, что ваш пример кода не работает.Одна вещь, которую вы могли бы сделать, чтобы улучшить этот дизайн, это заставить ваш класс Actions возвращать список подэтапов с помощью хорошо определенного метода:

public class Actions {
    public static final String SUBACTION_TEST1 = "suoOne";
    public static final String SUBACTION_TEST2 = "subTwo";

    public List<String> getSubActions() {
        return Arrays.asList(SUBACTION_TEST1, SUBACTION_TEST2);
    }
}

public enum Action {
    ACTION1("One", new Actions(){
        public static final String TEST = "test";

        @Override
        public List<String> getSubActions() {
            return Arrays.asList(TEST);
        }
    }),

    private final String act;
    private final Actions actions;

    private Action(String act, Actions actions) {
        this.act = act;
        this.actions = actions;
    }

    public Actions getActions() {
        return actions;
    }
}

И использовать это:

List<String> subActionList = Action.ACTION1.getSubActions();
...