声纳 - 条件不应无条件地评估为“TRUE”或“FALSE”

时间:2017-04-03 12:54:04

标签: java

您好我已经写下以下代码来检查列表是否相等

 private  boolean equalTypeLists(List<Type> one, List<Type> two){
    if (one == null && two == null){
        return true;
    }
    if((one == null && two != null)
            || one != null && two == null
            || one.size() != two.size()){
        return false;
    }
    one = new ArrayList<>(one);
    two = new ArrayList<>(two);

    Collections.sort(one, new Comparator<Type>() {
        @Override
        public int compare(Type o1, Type o2) {
            return o1.getValue().compareTo(o2.getValue());
        }
    });
    Collections.sort(two, new Comparator<Type>() {
        @Override
        public int compare(Type o1, Type o2) {
            return o1.getValue().compareTo(o2.getValue());
        }
    });

    return checkForTwoEqualTypeLists(one,two);
}

但是Sonar正在给出Blocker消息“条件不应无条件地评估为”TRUE“或”FALSE“”以下代码行

if((one == null && two != null)
        || one != null && two == null
        || one.size() != two.size()){
    return false;
}

请你帮我解决上面的情况。

1 个答案:

答案 0 :(得分:3)

来自sonar website

条件不应无条件地评估为&#34; TRUE&#34;或者到&#34; FALSE&#34;

  

条件语句使用的条件不能是任何条件   FALSE会使代码块无法正常工作。如果   条件不能评估为TRUE,条件   语句完全是冗余的,并且使代码的可读性降低。

     

代码很可能与程序员不匹配   意图。应该删除条件或者应该更新条件   所以它并不总是评估为TRUE或FALSE。

最后一句有助于确定要带来的更正:

应该删除条件,或者应该更新条件,以便它不会总是评估为TRUE或FALSE。

在您的情况下,Sonar作为违规规则发现的条件语句不应更新,但应删除,因为即使这些条款正确,也是多余的。

在此代码中,如果if语句为false,则表示至少onetwo(甚至可能两者)都不是{{1} }:

null

但在第二个if (one == null && two == null){ return true; } 声明中,您重复此测试:

if

此处的if((one == null && two != null) || one != null && two == null || one.size() != two.size()){ return false; } 检查:!= null(one == null && two != null)不是必需的,因为我们知道当我们到达此代码时,如果其中之一(one != null && two == null或{{1 }})是one,另一个不一定是two(第一个null语句的结论)。

所以这应该足够了:

null