或者,重新表达它:enum类型是否可以“变异”?
public enum Foo {
ONE,TWO;
private String bar;
Foo() { this.bar = ""; }
String bar() { return bar; }
// legal?
void bar(String bar) { this.bar = bar; }
}
我想如果我想修改它,它就不再是枚举类型了。
思想?
答案 0 :(得分:4)
绝对有效。这只是一个非常糟糕的主意。调用者可能期望枚举是正确不可变的。在某些情况下,您可能希望将其“显示”为不可变的,例如使用缓存,同时仍然改变内部变量...但这是一个非常边缘的情况。
至于为什么Java允许你这样做...即使它强制所有成员变量都是最终的,这也不会使枚举值真正不可变...例如,你可以拥有每次调用特定方法时修改的List<String>
...
从根本上说,Java并不擅长强制执行不变性。