是否可以修改枚举声明中的实例变量?

时间:2011-02-22 18:28:53

标签: java dynamic enums instance

或者,重新表达它:enum类型是否可以“变异”?

public enum Foo {
    ONE,TWO;

    private String bar;

    Foo() { this.bar = ""; }
    String bar() { return bar; }

    // legal?
    void bar(String bar) { this.bar = bar; }
}

我想如果我想修改它,它就不再是枚举类型了。

思想?

1 个答案:

答案 0 :(得分:4)

绝对有效。这只是一个非常糟糕的主意。调用者可能期望枚举是正确不可变的。在某些情况下,您可能希望将其“显示”为不可变的,例如使用缓存,同时仍然改变内部变量...但这是一个非常边缘的情况。

至于为什么Java允许你这样做...即使它强制所有成员变量都是最终的,这也不会使枚举值真正不可变...例如,你可以拥有每次调用特定方法时修改的List<String> ...

从根本上说,Java并不擅长强制执行不变性。