【发布时间】:2020-08-22 04:50:20
【问题描述】:
让我们看看这里的枚举定义:
public enum Day {
MONDAY(1),
TUESDAY(2),
WEDNESDAY(3);
int index;
Day(int i) {
index = i;
}
public void setIndex(int index) {
this.index = index;
}
public static void main(String[] args) {
Day x = MONDAY;
Day y = MONDAY;
x.setIndex(2);
System.out.println(y.index); // Ouput: 2
}
一般来说,我知道我们不应该实现这样的代码。
为了防止这种情况,为什么 java 不使用 final 为 final int index 就像 Java 对待接口的属性一样。谁能解释一下?
【问题讨论】:
-
一个 property 在 Java 中由它的 getter/setter 定义。接口根本不能有instance fields;它们只能有常量。
-
使所有枚举字段
final会阻止我们做的一件事是enum singletons,尽管我不认为这是一个太大的问题。我们仍然可以用类编写单例。