gpt4 book ai didi

java - SonarQube - boolean 逻辑正确性 -

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:45 26 4
gpt4 key购买 nike

我的方法 ma​​tches1() 的逻辑表达式有问题。

问题

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"

我基本上是在执行此逻辑以避免在我的“要执行的 block ”上出现 NPE

我的代码

ma​​tches1()

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 会告诉我什么,他没有提示。ma​​tches2()

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;
}
}

问题

  1. 问题是出在我的 boolean 逻辑上还是 SonarQube 丢失了他的想法?
  2. 如果问题出在 sonarQube 中,我该如何解决?

最佳答案

问题出在你的逻辑上。让我们一 block 一 block 地看:

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

在这一点上,如果两个变量都是 null 那么我们就不再在方法中了。因此,如果我们更进一步,那么至少其中一个是非空的。

此时可行的选择是:

  • 实际 = null,预期 = 非 null

  • 实际 = 非空,预期 = 空

  • 实际 = 非空,预期 = 非空

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

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

我们已经知道两个变量都不能是null,所以只要我们知道expected == null,就没有必要去测试是否actual != 空。我们走到这一步的事实已经证明了这一点。所以 actual != 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
}

请注意,else 不是必需的,删除它会使代码更易于阅读。

关于java - SonarQube - boolean 逻辑正确性 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com