2011-02-22 145 views
0

或者,重新说明它:枚举类型可以“可变”吗?可以在枚举声明中修改实例变量吗?

public enum Foo { 
    ONE,TWO; 

    private String bar; 

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

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

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

想法?

+0

尝试编译它吗? – StaxMan 2011-02-22 18:31:48

回答

4

这绝对有效。这只是一个非常糟糕的主意。来电者很可能预计枚举是正确的不可变的。在某些情况下,您可能希望使其“看起来”不可变,例如与缓存,虽然仍然突变内部变量......但这是一个非常边缘的情况下。

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

从根本上讲,Java在执行不可变性方面不是很好。

相关问题