我有一个正式的编码策略,在对常量进行比较时,应该将常量[non-primitive]与相关对象进行比较。
例如:
final String BEST_NAME = "Jim";
String myName = "Bob";
比较应该是
BEST_NAME.equalsIgnoreCase(myName)
我似乎无法找到针对此的PMD特定规则......是否存在?
答案 0 :(得分:1)
我猜您正在寻找类似于PositionLiteralsFirstInCaseInsensitiveComparisons PMD规则的内容。
规则规定恒定值应首先进行比较。
这大部分时间用于内联(例如myName.equals("Jim")
)个案,但它永远不会找到你展示的例子我们(例如myName.equalsIgnoreCase(BEST_NAME)
),因为PMD无法引用常量字段。
我建议使用 FaultHunter ,它也可以检测到这类规则违规,但它仍然使用熟悉的位置文字首先进行比较规则的名称,因此很容易适应。您可以自己查看示例on this demo page。
答案 1 :(得分:0)
我似乎无法找到针对此的PMD特定规则......是否存在?
1 极不可能,因为这样的规则是项目(或可能是组织)特定的。实际上,对于大多数人/项目/组织而言,这样的规则将是“完全错误的”#34;。对所有字符串常量使用不区分大小写的比较不是正常/标准/最佳实践。
但是,我确实发现这个类似的规则符合您的要求:
equalsIgnoreCase
比较字符串,那么您应该使用文字值作为目标。如果需要,您可以为您的项目/组织编写自定义PMD规则......如果这是您需要的。
参考:
1 - 好的,其他人也可能有此要求,并且已经编写了这样的PMD规则。但是,跟踪代码并重新利用它可能比从头开始编写PMD规则更加努力......