将实例化类作为枚举中的参数进行内联

时间:2012-03-31 13:32:09

标签: java class enums instance css

我是java编程的新手,并试图学习它。 我遇到了一个无法在网络上找到解决方案的问题:

我有一个枚举,这是一个动作的“列表”,每个动作都有一个属性 类型的操作,包含可能的子动作列表。 subacions是常量字符串。

我想在枚举构造函数中实现动作的匿名实例,以便这样做 除了标准的子行为之外,每个枚举都可以有其子行为

我试着写一个类似下面的枚举

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

这是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 个答案:

答案 0 :(得分:3)

您的枚举没有名为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();