我有以下公开枚举:
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"]
组成。
有人知道任何解决方法吗?我需要这个枚举有一个“非静态”属性。
它不需要是枚举,但仍然应该易于使用。
答案 0 :(得分:1)
枚举永远是静态的。
此处的解决方法可能是将集合存储在枚举外部,例如枚举外部的非静态映射,枚举值为键:
Map<CommandObject, Collection<String>>
然后,您可以根据需要拥有此地图的多个单独实例,但仍然会将这些集合与特定的枚举值相关联。