【问题标题】:Sonar - Conditions should not unconditionally evaluate to "TRUE" or to "FALSE"声纳 - 条件不应无条件地评估为“真”或“假”
【发布时间】:2017-04-03 22:44:17
【问题描述】:

您好,我在下面编写了用于检查列表是否相等的代码

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

请您帮我解决上述情况。

【问题讨论】:

标签: java


【解决方案1】:

来自sonar website

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

条件语句使用的条件只能是 FALSE 具有使代码块不起作用的效果。如果 条件只能计算为 TRUE,条件 语句是完全多余的,并且会降低代码的可读性。

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

最后一句帮助识别带来的更正:

要么删除条件,要么更新条件,使其不总是评估为 TRUE 或 FALSE。

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


在这段代码中,如果if语句是false,则意味着至少onetwo(甚至可能两者)不是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 &amp;&amp; two != null)one != null &amp;&amp; two == null 不是必需的,因为我们知道,当我们到达此代码时,如果其中一个(onetwo)是null,另一个一个不一定是null(第一个if语句的结论)。

所以这应该足够了:

if (one == null && two == null){
    return true;
}

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

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2017-05-17
    • 2018-08-17
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多