PMD:避免在条件语句中使用文字

Bhu*_*han 5 java static-analysis pmd literals

我有以下代码。我收到“避免在条件语句中使用文字”。PMD 中第 5 行发出警告。

List<Object> listObj = getData();
 if (listObj.isEmpty()) {
      throw new NoEntity("No entity found for given Device.");
 }
 if (listObj.size() > 1) {
      throw new MultiEntity(
          "Multiple entity record found for given Device.");
 }
Run Code Online (Sandbox Code Playgroud)

我不喜欢将全局静态最终 int 变量的值设置为 1 并在 if 条件中使用它。还有其他解决方案吗?

小智 2

如果您使用的是 Apache Commons Lang,可以在 NumberUtils 中找到它https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html#INTEGER_ONE

  • 是的,这将使警告消失,但是警告的全部目的是使条件更容易理解。如果您将“1”更改为“NumberUtils.INTEGER_ONE”,仍然不会使代码变得更好。如果您创建一个名为“private static final int MAXIMUM_NUMBER_OF_LIST_ELEMENTS = 1;”的常量,将使未来的开发人员更容易理解为什么使用数字“1”。 (4认同)
  • 将 0、1 和 n 作为单独的情况处理是很常见的,并且使用 0 和 1 的文字是完全合理的,我们可以说它们是广泛理解的值。有时 PMD 警告是迂腐且无用的。 (2认同)