我是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;
我知道可能这种方法错了但在改变实施之前 我想知道为什么不起作用。
感谢。
答案 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();