Java 为什么使用==比较枚举会导致PMD警告?
下面使用Java 为什么使用==比较枚举会导致PMD警告?,java,enums,comparison,pmd,Java,Enums,Comparison,Pmd,下面使用==比较两个枚举值: MyEnum enum1 = blah(); // could return null MyEnum enum2 = blahblah() // could return null if (enum1 == enum2) { // ... } 但PMD在第3行给出警告: 使用equals()比较对象引用 我不确定是否理解,但认为使用==比较两个枚举是可以的,因此我想知道我的代码是否可以改进或者检查是否不正确。使用.equals()是可以的,因为所
==
比较两个枚举值:
MyEnum enum1 = blah(); // could return null
MyEnum enum2 = blahblah() // could return null
if (enum1 == enum2) {
// ...
}
但PMD在第3行给出警告:
使用equals()比较对象引用
我不确定是否理解,但认为使用
==
比较两个枚举是可以的,因此我想知道我的代码是否可以改进或者检查是否不正确。使用.equals()
是可以的,因为所发生的事情是将实例与=
进行比较
public final boolean equals(Object other) {
return this==other;
}
请注意,
.equals()
的这个实现是最终的
,这意味着您不能在枚举中重写它。这确实被认为是错误:
// skip, if it is an enum
if (type0.getType() != null && type0.getType().equals(type1.getType()) && type0.getType().isEnum()) {
return data;
}
谢谢-但是任何一个枚举都可能为null,因此不想冒NullPointerException的风险。然后您必须添加一个检查。或者使用Java8的
可选类型:或者坚持使用enum1==enum2
忽略此PMD警告。这是正常的。可能相关:另请参见。