我不知道我是否是唯一知道这一点的人,但是枚举的值不是隐含的最终值,可以修改.
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
Run Code Online (Sandbox Code Playgroud)
这些值通常在实例创建(TOTO("TOTO 1"))时初始化,但除了我自己之外,我从未见过有人使用final关键字来表示应该是不可变的枚举变量.这不是问题的关键,只是想知道我是否是唯一意识到这一点的人.
我想知道的是,是否有任何用例来创建可变的枚举?
而且我也想知道我们可以用枚举做的限制(良好做法与否).我没有测试它,但也许枚举可以注入Spring bean?至少看起来我们可以注释每个实例(@Deprecated可以正常工作),以及方法.
一个可能的用例是延迟初始化(在首次使用时计算一些字段值,如果通常根本不使用它们),或者是"普通"可变单例对象(如注册表等).
但是,在大多数情况下,枚举对象应该是不可变的,并且它们的字段是最终的.
虽然你在这里指出一个有趣的事实,但就我而言,可变枚举字段没有用处.有很多原因可以解释为什么使用这种语言"功能"("bug"?)会是一个坏主意,尤其是其他开发人员混淆的可能性.
| 归档时间: |
|
| 查看次数: |
4674 次 |
| 最近记录: |