声纳错误条件不应无条件地评估为" TRUE"或者到" FALSE"

时间:2016-12-19 18:29:13

标签: java collections sonarqube sonar-runner

我的声纳受到了侵犯:

  

"条件不应无条件地评估为" TRUE"或者到" FALSE""

代码如下。

List<MediaContent> savedList = source.getChildMediaContents();
List<MediaContent> supplierList = target.getChildMediaContents();

// if existing and incoming both empty
if(savedList == null && supplierList == null){
    return false;
}

// if one is null and other is not then update is required
if(savedList == null && supplierList != null){
    return true;
}

if(savedList != null && supplierList == null){
    return true;
}

在两个if块之下,它给出了一个错误

// if one is null and other is not then update is required
if(savedList == null && supplierList != null){
    return true;
}

if(savedList != null && supplierList == null){
    return true;
}

3 个答案:

答案 0 :(得分:4)

if(savedList == null && supplierList == null){
    return false;
}

if(savedList == null && supplierList != null){

条件supplierList != null在到达时始终为真。 由于Java中&&运算符的短路行为, 在达到supplierList != null之前, savedList == null必须先成为现实。

但如果savedList == null为真, 然后我们从先前的条件知道supplierList不是null,所以它是一个毫无意义的条件。

另一方面,如果savedList == null为假, 那么由于短路行为, <{1}}将不会被评估。

因此,无论supplierList != null的结果如何, 永远不会评估savedList == null, 所以你可以简单地删除那个条件。

supplierList != null

下一步:

if (savedList == null) {
    return true;
}

由于之前的简化,现在很明显if(savedList != null && supplierList == null){ 不能savedList。所以我们也可以删除这个条件:

null

简而言之,这相当于您发布的代码:

if (supplierList == null) {
    return true;
}

答案 1 :(得分:1)

基于上述情况,你可以避免第二个如果条件并且有一个其他情况

if(savedList == null && supplierList == null){
    return false;
} else {
    return true; // either savedList or supplierList is not null
}

或者您可以简单地使用return语句删除所有if语句

return (savedList != null || supplierList != null);

答案 2 :(得分:0)

您可以尝试:

if(savedList == null && supplierList == null){
  return false;
}
return true;