由单一return语句替换该if-then-else语句

问题描述 投票:3回答:5

虽然解决问题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的人应该简化布尔值的语句返回。

java sonarqube
5个回答
9
投票

那么,你可以更换:

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

与等价的:

return divisionId == other.divisionId;

如果false这将返回divisionId != other.divisionId否则true


2
投票

我使用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;
}

0
投票

尝试是这样的:

return null != obj && this == obj || getClass() == obj.getClass() &&
       this.divisionId == ((Division) obj).divisionId;

0
投票

不能完全确定你的意图为返回false的if语句,但它好像你可以简单地总是返回false,除非“这个== OBJ”。

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

这同样的事情可以用一条线来完成

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

0
投票

Sonarqube规则:qazxsw POI - 返回布尔表达式,而不是布尔值

在SonarQube,有助于分析这些源代码的执行产生问题的规则。有四个squid:S1126

  • 代码味道(可维护性域)
  • 错误(可靠性域)
  • 漏洞(安全域)
  • 安全热点(安全域)
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() { }块来克服这个问题。


SonarSourceelse {},使得代码分析 - 质量软件源于品质代码

  • rules连续代码质量 - 在您的,内部部署的CI分析代码。联机使用SonarQube SonarQube
  • 使用as a Service其渔获上飞的问题,在你的IDE。

也可以看看:

© www.soinside.com 2019 - 2024. All rights reserved.