在条件SonarQube错误时避免使用文字

时间:2014-02-25 09:59:51

标签: java object sonarqube

我在sonarqube收到类似Avoid Literals In If Condition的错误,无法找到合适的解决方案。

     SingleWrapper singleWrapper=null;
      :
      :
      singleWrapper=createWrapper();
      :
      private void wrap(){
           if(singleWrapper != null){  //Here i am getting error.
             //do Something
                             }
                         }

我知道这个问题似乎重复了一个,但事实并非如此,因为之前曾要求String。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

这是因为您的静态代码分析工具将null检测为硬编码文字,严格地说,这是真的。

建议的行为是声明一个像

这样的常量对象
final static Object NULL = null;

并像

一样使用它
if(singleWrapper != NULL)

但我还没有遇到开发人员这样做。在这种情况下,我认为你没事,你可以忽略代码检查警告。那是我的2美分。

答案 1 :(得分:0)

PMD规则的描述如下:

  

避免在条件语句中使用硬编码文字,将它们声明为静态变量或私有成员。

虽然在大多数情况下它是相关的(你不想拥有任意硬编码字符串或数字文字),在这种情况下(IMHO)有点过于热心,因为检查null是如此广泛使用它应该被这条规则忽略。

由于此规则来自PMD(不是SQ内部引擎),您可以要求上游修复 - 或者只是将其从您的配置文件中删除,如果它真的让您感到烦恼。

请注意,此规则是Controversial Rules集的一部分。