Ste*_*ers 6 java comparison enums pmd
以下比较使用以下两个枚举值==
:
MyEnum enum1 = blah(); // could return null
MyEnum enum2 = blahblah() // could return null
if (enum1 == enum2) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是PMD 在第3行给出了CompareObjectsWithEquals警告:
使用equals()来比较对象引用
Mar*_*vin 18
这确实被接受为bug:
但是,捕获所有可能的情况似乎很棘手(引自较新的bug):
那个有点棘手,为了确定一个类型是否是Enum,我们需要类型解析.
我能够调整规则来检查变量的类型是否为Enum.这仅适用于枚举类型位于pmd的"auxclasspath",以便类型解析可以找到它.
您的隔离示例仍会触发此误报,因为PMD不知道ProcessingStatus是什么.我用java.math.RoundingMode验证了它,它始终在类路径上并将被解析.
("您的示例"是指票证作者,而不是Stack Overflow上的OP)
您的案例可能适用于PMD 5,您链接的来源属于PMD 4.
更新:当前源包含额外的枚举检查:
// skip, if it is an enum
if (type0.getType() != null && type0.getType().equals(type1.getType()) && type0.getType().isEnum()) {
return data;
}
Run Code Online (Sandbox Code Playgroud)