我不知道我是不是唯一知道这一点的人,但是枚举的值并不是隐式最终的,可以修改。
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 注入(inject)? 至少看起来我们可以注释每个实例(例如@Deprecated 工作得很好),还有方法。
最佳答案
一个可能的用例是惰性初始化(在第一次使用时计算一些字段值,如果它们经常根本不被使用),或者“正常”可变单例对象(如注册表等)。
不过,在大多数情况下,枚举对象应该是不可变的,并且它们的字段是最终的。
关于Java 枚举可变性用例和可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015870/