【问题标题】:PMD Rule for making comparisons against constants与常数进行比较的 PMD 规则
【发布时间】:2014-10-10 07:12:02
【问题描述】:

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

例如:

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

比较应该是

BEST_NAME.equalsIgnoreCase(myName)

我似乎找不到针对此的 PMD 特定规则...它存在吗?

【问题讨论】:

  • 你在这里陈述了两个独立的规则:一个,常量应该放在第一位;第二,'比较应该是......equalsIgnoreCase().我怀疑第二个是你想要的。请澄清。
  • 不,案例比较与它无关,只是一个例子。

标签: java coding-style checkstyle pmd


【解决方案1】:

我似乎找不到针对此的 PMD 特定规则...它存在吗?

不太可能1,因为这样的规则是特定于项目(或可能是组织)的。事实上,对于大多数 人/项目/组织来说,这样的规则是“完全错误的”。对 all 字符串常量使用不区分大小写的比较不是正常/标准/最佳实践。

但是,我确实发现这条规则与您要求的相似


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

参考:


1 - 好的,可能其他人也有这个要求,并且已经编写了这样的 PMD 规则。但是,与从头开始编写 PMD 规则相比,追踪代码并重新调整它的用途可能更费力......

【讨论】:

  • 请解释否决票。这个问题告诉 OP 满足他要求的(可能)最有效的方法。它也回答了他的字面问题。
  • 我不相信他的实际问题与不区分大小写有关。标题和第一句话都没有这样说。我已经请他澄清了。
  • 我没有投反对票,但问题是关于比较,而不是关于不区分大小写的问题 [这是一个规则]...我看到链接引导我找到我正在寻找的答案!谢谢。
【解决方案2】:

我猜你正在寻找类似于PositionLiteralsFirstInCaseInsensitiveComparisons PMD 规则的东西。

规则规定常量值在比较中应该放在第一位。 这在大多数情况下适用于内联(例如myName.equals("Jim"))案例,但是它永远找不到您向我们展示的示例(例如myName.equalsIgnoreCase(BEST_NAME)),因为 PMD 无法引用常量字段。 p>

我建议使用 FaultHunter,它也可以检测到这些违反规则的行为,但它仍然使用熟悉的 Position Literals First In Comparisons 名称对于规则,所以很容易适应。你可以自己看一个例子on this demo page

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多