我有一个 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/