+-
java – SonarQube – 布尔逻辑正确性 –
我的方法matches1()上的逻辑表达式有问题.

问题

SonarQube告诉我有一个错误:
(expectedGlobalRule == null&& actual!= null)

SonarQube:
Change this condition so that it does not always evaluate to
“true”.
Conditions should not unconditionally evaluate to “TRUE” or to “FALSE”

我本质上是在做这个逻辑,以避免我的“块被执行”上的NPE.

我的代码

matches1()

private boolean matches1(GbRule actual, GbRule expected) {
     if(actual == null && expected == null) {
        return true;
     } else if((expected == null && actual != null) || (expected != null && actual == null)) {
        return false;
     } else {
       //Block to be executed
     }
}

我颠倒了逻辑,看看SonarQube会告诉我什么,他并没有抱怨它.
matches2()

private boolean matches2(GbRule actual, GbRule expected) {
      if(actual == null && expected == null) {
         return true;
      } else if(expected != null && actual != null)  {
         //Block to be executed
      } else {
         return false;
      }
}

>问题出在我的布尔逻辑中,还是SonarQube丢失了
他的脑子?
>如果问题出在sonarQube内,我该如何解决?

最佳答案
问题在于你的逻辑.让我们一块一块地说:

 if(actual == null && expected == null) {
    return true;

此时,如果两个变量都为null,那么我们就不再使用该方法了.因此,如果我们得到任何进一步,那么其中至少有一个是非空的.

此时可行的选择是:

> actual = null,expected =非null
> actual =非null,expected = null
> actual =非null,expected =非null

现在,让我们看看下一段代码:

 } else if((expected == null && actual != null) 

我们已经知道两个变量都不能为空,所以只要我们知道期望== null,就不需要测试是否实际!= null.事实证明,我们已经做到了这一点.所以实际!= null总是如此,这就是引发问题的原因.

编辑

这意味着您的代码可以归结为:

private boolean matches1(GbRule actual, GbRule expected) {
  if(actual == null && expected == null) {
    return true;
  } else if(actual == null || expected == null) {
    return false;
  } 

  //Block to be executed
}

请注意,不需要其他&删除它使代码更容易阅读.

点击查看更多相关文章

转载注明原文:java – SonarQube – 布尔逻辑正确性 – - 乐贴网