枚举可以是非静态的吗?

时间:2016-06-27 14:38:47

标签: java enums static

我有以下公开枚举:

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"]组成。

有人知道任何解决方法吗?我需要这个枚举有一个“非静态”属性。

它不需要是枚举,但仍然应该易于使用。

1 个答案:

答案 0 :(得分:1)

枚举永远是静态的。

此处的解决方法可能是将集合存储在枚举外部,例如枚举外部的非静态映射,枚举值为键:

Map<CommandObject, Collection<String>>

然后,您可以根据需要拥有此地图的多个单独实例,但仍然会将这些集合与特定的枚举值相关联。