如何检查枚举值等于?

我如何检查枚举值的平等? 我尝试了以下,但它失败了。 为什么?

class enum Test {
    LETTER("1A");

    private String value;
    public Test(String value) {
        this.value = value;
    }

    @Override
    public void toString() {
        return value;
    }
}


String teststring = "1A".
Sysout(teststring.equals(Test.LETTER)); //false. Why???

由于您正在比较String实例和Enum实例,所以比较返回false

@RohitJain已经给出了一个很好的解释,为什么toString()方法在你的比较中没有在他的答案中被调用,以及你应该如何使用它,如果它是你想要做的。

但是, toString()不应该用于比较目的,它应该被重写仅提供对象的自定义字符串表示形式。

如果你这样做的话,你可以比较你在比较真实的比较属性:

String teststring = "1A".
Sysout(teststring.equals(Test.LETTER.getValue())); // Will return true

当然,你应该为value属性提供一个getter,或者让它在进行比较的操作中可见。

你也可以在你的enum编写一个isEqual()方法,如下所示:

enum Test {
    LETTER("1A");

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

    @Override
    public String toString() {
        return value;
    }

    public boolean isEqual(String value) { 
        return this.value.equals(value);
    }
}

只要做Test.LETTER.isEqual(teststring)来做这个比较。

或者甚至是一个static getByValue(String value)方法来获取给定value的枚举实例:

enum Test { 
    ...
    public static Test getByValue(String val) { 
        for (Test c : values()) {
            if (c.value.equals(val)) {
                return c;
            }
        }
    } 
} 

Test x = Test.getByValue("1A"); // x == Test.LETTER

你的代码中有太多的其他编译器错误:

  • class enum Test应该是enum Test
  • 枚举的构造函数只能是private
  • toString()方法的返回类型是void 。 这不是一个有效的覆盖。 制作返回类型的String
  • 我不知道这些错误是否仍然存在于您的原始代码中,或者仅仅是您的文章中的错误。

    现在谈谈具体问题。 当你打印一个enum常量时,会自动调用toString()方法。 所以,当你打印Test.LETTER时你会得到1A

    Test.LETTER作为参数传递给任何方法时,这不是真的。 你将不得不明确地调用toString() 。 所以,那应该是:

    System.out.println(teststring.equals(Test.LETTER.toString()));
    

    另一种方法是在你的枚举中提供一个方法,它为你提供一个特定字符串值的enum常量:

    public static Test of(String str) {
        for (Test test: values()) {
            if (test.value.equals(str)) {
                return test;
            }
        }
        return null;
    }
    

    你甚至可以缓存由values()方法返回的数组,以便它不会一次又一次地被创建。

    然后,比较枚举常量为:

    String teststring = "1A";
    System.out.println(Test.of(teststring) == Test.LETTER);
    

    只要按照以下方法进行检查,它就会起作用

    teststring.equals(Test.LETTER.toString())
    

    Test.LETTER是一个枚举,因此它永远不会等于一个String,但它的值可以等于一个String,因此您必须直接使用enum的值进行检查。

    链接地址: http://www.djcxy.com/p/91841.html

    上一篇: How to check equals on enum value?

    下一篇: Singleton in java