2011-02-22 93 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在執行不可變性方面不是很好。