在解决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中的布尔文字语句的返回。
答案 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