用于与常数进行比较的PMD规则

时间:2014-08-17 00:25:58

标签: java coding-style checkstyle pmd

我有一个正式的编码策略,在对常量进行比较时,应该将常量[non-primitive]与相关对象进行比较。

例如:

final String BEST_NAME = "Jim";
String myName = "Bob";

比较应该是

BEST_NAME.equalsIgnoreCase(myName)

我似乎无法找到针对此的PMD特定规则......是否存在?

2 个答案:

答案 0 :(得分:1)

我猜您正在寻找类似于PositionLiteralsFirstInCaseInsensitiveComparisons PMD规则的内容。

规则规定恒定值应首先进行比较。 这大部分时间用于内联(例如myName.equals("Jim"))个案,但它永远不会找到你展示的例子我们(例如myName.equalsIgnoreCase(BEST_NAME)),因为PMD无法引用常量字段。

我建议使用 FaultHunter ,它也可以检测到这类规则违规,但它仍然使用熟悉的位置文字首先进行比较规则的名称,因此很容易适应。您可以自己查看示例on this demo page

答案 1 :(得分:0)

  

我似乎无法找到针对此的PMD特定规则......是否存在?

1 极不可能,因为这样的规则是项目(或可能是组织)特定的。实际上,对于大多数人/项目/组织而言,这样的规则将是“完全错误的”#34;。对所有字符串常量使用不区分大小写的比较不是正常/标准/最佳实践。

但是,我确实发现这个类似的规则符合您的要求:


如果需要,您可以为您的项目/组织编写自定义PMD规则......如果这是您需要的。

参考:


1 - 好的,其他人也可能有此要求,并且已经编写了这样的PMD规则。但是,跟踪代码并重新利用它可能比从头开始编写PMD规则更加努力......