java - 如何比较枚举值?

标签 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() 吗?) .

有没有其他方法可以有效地做到这一点,或者可以吗?

最佳答案

在枚举中,每个实例都代表一个独特的事物。枚举值用于描述该事物,使其易于人类阅读等。

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

关于java - 如何比较枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758713/

相关文章:

java - 使用 .toLowerCase 打印属性

java - 除了 Asc/Desc,还有其他使用 Mysql Order By 的方式吗?

java - 如何从静态上下文中引用枚举变量?

java - Java 枚举反射

c++ - 枚举引用参数传输而不是 int 引用参数

C# 枚举排除

java - Java中删除数组中的所有元素

Java 自然语言解析器

java - 在一个实体中映射三个相同的表

java - 使用 JPA 将嵌套枚举保存到数据库