用单个return语句替换这个if-then-else语句

时间:2017-08-22 12:24:14

标签: java sonarqube

在解决sonarQube问题时,我面临以下警告,是否有人告诉我如何克服此警告

方法: -

@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Division other = (Division) obj;

        if (divisionId != other.divisionId)
        //getting warning for above if condition

            return false;
        return true;
    }

警告:

用一个return语句替换这个if-then-else语句。

描述: -

应该简化包含在if-then-else中的布尔文字语句的返回。

6 个答案:

答案 0 :(得分:9)

好吧,你可以替换:

if (divisionId != other.divisionId)
    return false;
return true;

与等价物:

return divisionId == other.divisionId;

如果false,则会返回divisionId != other.divisionId,否则会返回true

答案 1 :(得分:0)

尝试这样的事情:

PYTHONPATH

答案 2 :(得分:0)

不完全确定你对返回false的if语句的意图,但似乎你总是可以返回false,除非“this == obj”。

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    else
        return false;
}

同样的事情可以用一行完成

@Override
public boolean equals(Object obj) {
    return this == obj;
}

答案 3 :(得分:0)

使用sonarlint时,我收到了类似的警告消息“不应该将返回的布尔表达式包装到“ if-then-else”语句中” 这是我以前的代码

if (val.isEmpty()) {
    switchCompat.setChecked( false );
} else {
    switchCompat.setChecked( true );
}

现在我将其更改为

boolean checked = val.isEmpty();
switchCompat.setChecked( checked );

根据这个问题,它类似于

@Override
public boolean equals(Object obj) {
    Division other = (Division) obj;
    if (this == obj)
        return true;
    else if (obj == null)
        return false;
    else if (getClass() != obj.getClass())
        return false;
    else if (divisionId != other.divisionId)
        return false;
    else
        return true;
}

类似地,可以这样解决

@Override
public boolean equals(Object obj) {
    boolean success;
    Division other = (Division) obj;

    if (this == obj)
        success = true;
    else if (obj == null)
        success = false;
    else if (getClass() != obj.getClass())
        success = false;
    else if (divisionId != other.divisionId)
        success = false;
    else
        success = true;
    return success;
}

答案 4 :(得分:0)

  

声纳Qube规则: squid:S1126 - 返回布尔表达式而不是布尔文字

在SonarQube中,分析器提供规则,这些规则在源代码上执行以产生问题。 types of rules有四个:

  • 代码异味(可维护性域)
  • 错误(可靠性域)
  • 漏洞(安全域)
  • 安全热点(安全域)
Noncompliant Code Example      |  Compliant Solution
---------------------------    |  ----------------------------
boolean foo(Object param) {    |  boolean foo(Object param) {
    /*Some Condition*/         |    boolean expression = false;
    if(param == null) {        |    if(param != null) { // param == null - squid:S4165
        return true;           |        //expression = true; //(squid:S4165)
    }                          |    //} else {
                               |        if(/**/) { // Compliant
    if(/**/){/* Noncompliant*/ |            expression = true; 
        return true;           |        } else if(/**/) {
    } else if(/**/) {          |            expression = true;      
        return true;           |        } else if(/**/) { // squid:S1871
    } else if(/**/) {          |            expression = true;      
        return true;           |        } else { // To avoid else.
    }                          |            expression = false;
    return false;              |        }
}                              |    }
                               |    return expression;
                               |  }

squid:S1871 -条件结构中的两个分支不应具有完全相同的实现:当块中有多个else if() { }同一代码来克服上述问题时,我们将使用else {}块具有不同的实现方式。


SonarSource rules ,使代码分析器-质量软件来自质量代码

另请参阅:

答案 5 :(得分:0)

这必须有效:

return this == obj
        ? true
        : obj == null
            ? false 
            : getClass() != obj.getClass()
                ? false
                : divisionId != ((Division)obj).divisionId
                    ? false : true