我有以下公共(public)枚举:
public enum CommandObject {
STRING/*etc.*/;
private Collection<String> validOptions = new ArrayList<>();
protected Collection<String> getValidOptions() {
return validOptions;
}
protected boolean hasValidOptions() {
return !validOptions.isEmpty();
}
protected CommandObject addValidOption(String option) {
validOptions.add(option);
return this;
}
public static CommandObject argsetOf(String... args) {
CommandObject result = STRING;
for (String option : args) {
result.addValidOption(option);
}
return result;
}
}
但看起来,无论我调用哪个实例,getValidOptions()
总是返回相同的集合。
例如,当调用 argsetOf("hi")
和 argsetOf("bye")
时,集合始终由 ["hi","bye"组成]
。
有人知道这个问题的解决方法吗?我需要这个枚举具有“非静态”属性。
它不需要是枚举,但仍然应该易于使用。
最佳答案
枚举始终是静态的、隐式的。
这里的解决方法可能是将集合存储在枚举外部,例如枚举外部的非静态映射,以枚举值作为键:
Map<CommandObject, Collection<String>>
然后,您可以根据需要拥有任意多个此映射的单独实例,但仍将集合与特定枚举值相关联。
关于java - 枚举可以是非静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056803/