如何比较Enum价值?

时间:2016-06-11 00:10:15

标签: java enums

我想比较Enum的值,例如。

public enum En{
    Vanila("Good"),
    Marlena("Luck"),
    Garnela("Good");

    private String value;

    private En(String s){
        this.value = s;
    }
}

AS VanilaGarnela具有相同的值,比较它们应该返回true。有两种方法,一种是==运算符,第二种是equals()方法。我尝试了自己的逻辑并将此方法添加到枚举。

public boolean compareValue(En e){
        return (this.value).equals(e.value);
}

现在它工作正常。

En a = En.Vanila;
En b = En.Garnela;
En c = En.Marlena;

if(a.compareValue(b)){
    System.out.println("a == b");
}
if(a.compareValue(c)){
    System.out.println("a == c");
}
if(b.compareValue(c)){
    System.out.println("b == c");
}

我知道我们不能在枚举中覆盖equals方法(不知道为什么,我知道这是最终的但不是逻辑上的原因。你能解释一下,为什么我们不能在枚举中覆盖equals()?)

有没有其他方法可以有效地做到这一点,还是没有问题?

1 个答案:

答案 0 :(得分:1)

在枚举中,每个实例都代表着一个与众不同的东西。枚举值用于描述该事物,使其具有人类可读性等。

因此,您的代码没有理由认为Vanilla可能与Marlena相同。为它们设置相同的字符串值是没有意义的。