【问题标题】:enum getter returning wrong value枚举 getter 返回错误值
【发布时间】: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() 并在几天后告诉我们它是否有效。

标签: java enums


【解决方案1】:

你的枚举是可变的;有东西在打电话setValue()

你应该让你的枚举immutable - 这样做很有意义。通过将字段设置为 final 并放弃 setter 使其不可变:

public enum Type {
    A("abc1", "desc1"),
    B("abc2", "desc2"),
    C("abc3", "desc3"),
    D("abc4", "desc4"),
    E("abc5", "desc5");

    private final String value;
    private final String description;

    private Type(String value, String description) {
        this.value = value;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public String getValue() {
        return value;
    }
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多