【发布时间】:2012-10-22 16:40:59
【问题描述】:
我不知道我是否是唯一一个知道这一点的人,但枚举的值并不是隐含的最终值,可以修改。
enum EnumTest {
TOTO("TOTO 1"),
TATA("TATA 2"),
;
private String str;
private EnumTest(String str) {
this.str = str;
}
@Override
public String toString() {
return str;
}
}
public static void main(String[] args) {
System.out.println(EnumTest.TATA);
EnumTest.TATA.str = "newVal";
System.out.println(EnumTest.TATA);
}
TATA 2
newVal
这些值通常在实例创建时初始化 (TOTO("TOTO 1")),但是,除了我自己,我从未见过任何人使用 final 关键字来表示应该是不可变的枚举变量。这不是问题的重点,只是想知道我是否是唯一一个知道这一点的人。
我想知道是否有任何用例可以创建可变枚举?
而且我还想知道我们可以用枚举做些什么的限制(不管是不是好的做法)。 我还没有测试过,但也许可以用 Spring bean 注入枚举? 至少看起来我们可以注释每个实例(例如@Deprecated 可以正常工作)以及方法。
【问题讨论】:
-
对字段使用
final是枚举中的常见做法。