您好我已经写下以下代码来检查列表是否相等
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;
}
请你帮我解决上面的情况。
答案 0 :(得分:3)
条件不应无条件地评估为&#34; TRUE&#34;或者到&#34; FALSE&#34;
条件语句使用的条件不能是任何条件 FALSE会使代码块无法正常工作。如果 条件不能评估为TRUE,条件 语句完全是冗余的,并且使代码的可读性降低。
代码很可能与程序员不匹配 意图。应该删除条件或者应该更新条件 所以它并不总是评估为TRUE或FALSE。
最后一句有助于确定要带来的更正:
应该删除条件,或者应该更新条件,以便它不会总是评估为TRUE或FALSE。
在您的情况下,Sonar作为违规规则发现的条件语句不应更新,但应删除,因为即使这些条款正确,也是多余的。
在此代码中,如果if
语句为false
,则表示至少one
或two
(甚至可能两者)都不是{{1} }:
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 && two != null)
不是必需的,因为我们知道当我们到达此代码时,如果其中之一(one != null && two == null
或{{1 }})是one
,另一个不一定是two
(第一个null
语句的结论)。
所以这应该足够了:
null