创建表示一组常量字符串的简单Java Enum的最佳方法是什么

时间:2016-02-15 19:45:10

标签: java enums

我看到可以通过这些方式创建简单的枚举

public enum MyEnum1 {
    FOO,
    BAR;
}

public enum MyEnum2 {
    FOO("FOO"),
    BAR("BAR");

    private final String value;

    private MyEnum2(String value) {
        this.value = value;
    }

    public String value() {
        return value;
    }
}

在第一种情况下,我可以使用MyEnum1.FOO.name(),而在第二种情况下,我可以使用MyEnum2.FOO.value()来实现我的目的。我想知道当我只想让枚举代表一些常量的字符串时,最好的方法是什么。

使用上述枚举的优点/缺点是什么?哪种情况应该首选?使用name()方法有什么缺点吗?

2 个答案:

答案 0 :(得分:1)

第一个解决方案适合您。如果您想要在枚举中添加额外信息,请使用第二种解决方案:

public enum MyEnum2 {
FOO("This is the first", 867),
BAR("This is the second", 885);

private final String description;
private final Integer weight;

private MyEnum2(String description, Integer weight) {
    this.description = description;
    this.weight = weight
}

public String getDescription() {
    return description;
}

public Integer getWeight() {
    return weight;
}

}

答案 1 :(得分:0)

我说这取决于用例。我同意杰里米的看法,第一种方法看起来更好,更清洁。但是,如果其他一些代码依赖于枚举名称,那么我使用第二种方法,因为在第一种方法中,重构枚举会破坏你的应用程序。但如果您只想在某处打印名称,请使用第一个。