java - 枚举可以是非静态的吗?

标签 java enums static

我有以下公共(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/

相关文章:

wcf - 为什么这段代码会导致内存泄漏?

rust - 在 Rust 中有没有办法将静态变量包含到其他文件中?

java - 我应该如何信任 Apache Maven?

java - 扫描 Spring Boot .jar 文件时在 Java 11 jdeps 工具上获取 NPE

c# - 使用 Sprache 从标识符解析枚举?

swift - 如何在 IF 条件下获取枚举的参数值?

c# - 检查字符串是否可以转换为另一种类型 (C#)

c++ - 如何从C++源文件访问C源文件中的全局变量

java - 通过 MSGraph API 创建组也不会创建共享点

java - Java 中 getter/setter 的命名约定