【发布时间】:2015-09-29 12:06:03
【问题描述】:
我有一个枚举类型
public enum Type {
A("abc1", "desc1"),
B("abc2", "desc2"),
C("abc3", "desc3"),
D("abc4", "desc4"),
E("abc5", "desc5");
private String value;
private String description;
private Type(String value, String description) {
this.value = value;
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
我通过以下代码从枚举中获取值
Type[] type = Type.values();
for (int i = 0; i < type.length; i++) {
System.out.println(type[i].getValue());
}
此代码在服务器上运行。这几天它运行良好,这段代码的输出如下:
abc1
abc2
abc3
abc4
abc5
但几天后输出变为
abc1
abc2
abc1
abc4
abc5
如果我打印描述,那么它们总是正确的。
我无法弄清楚为什么 Type.getValue() 为枚举值 C 返回枚举值 A 的值。
【问题讨论】:
-
“但几天后输出变为” - 这让我笑了:) 某处还有其他正在运行的线程吗?
-
可变枚举感觉是个非常糟糕的主意。将
value设为final,移除setter。 -
确定没有人打电话给
setValue()? -
删除 setValue() 并在几天后告诉我们它是否有效。