java - 枚举中的重载等于方法 - 有什么陷阱吗?

标签 java enums

我有一个 Java 枚举,表示给定字段的潜在值,以及用于标识该值的唯一标识符:

    public enum MyEnum {
       TYPEA("A"),
       TYPEB("B")

       private String code;

       private MyEnum(String code){
          this.code = code;
       }

       public String getCode(){
          return code;
       }
   }

我想添加一个自定义比较器:

public boolean equals(String code){
    return getCode().equals(code);
}

这将允许我将我的枚举与字符串进行比较。

有没有我遗漏的陷阱?我看不出有什么明显的错误...

最佳答案

好吧,有两件事:

  • 你没有覆盖 - 你正在以一种令人困惑的方式重载
  • 您的相等性不对称 - MyEnum.A.equals("A") 为真,但 "A".equals(MyEnum.A) 为假。

我不会这样做 - 在您想要对代码执行相等性检查的地方,这样做很容易...但明确说明会更清楚。

毕竟,这只是两者之间的区别:

if (value.equals("A"))

if (value.getCode().equals("A"))

我认为后者更清楚。

关于java - 枚举中的重载等于方法 - 有什么陷阱吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434158/

相关文章:

DDB 中复合范围键的 Java 注释

java - 在 Java 中的不同行中打印多个 ArrayList 对象

swift - 类型不符合协议(protocol) CustomStringConvertible

java - 如何生成具有给定数量的属性的给定数量的随机对象?

java - 在 "spring-data-elasticsearch"4.0.4.RELEASE 中,如何将 SearchHits 转换为 Page?

java - 字符串到单词的 String[]

java - 如何重构沉睡的蜗牛

c++ - C++ 中的模板和预处理

java - 这是 Java 中正确的枚举实践吗?

java - 如何在 if 条件下重构一个复杂的表达式?