虽然解决问题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的人应该简化布尔值的语句返回。
那么,你可以更换:
if (divisionId != other.divisionId)
return false;
return true;
与等价的:
return divisionId == other.divisionId;
如果false
这将返回divisionId != other.divisionId
否则true
。
我使用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;
}
尝试是这样的:
return null != obj && this == obj || getClass() == obj.getClass() &&
this.divisionId == ((Division) obj).divisionId;
不能完全确定你的意图为返回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;
}
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 {}
,使得代码分析 - 质量软件源于品质代码
也可以看看: