声纳在下面的行
下面给出空指针违规existed.keySet()
请帮助我们解决此问题。
private boolean isEqualCaptions(Map<String, String> existed, Map<String, String> updated) {
if(existed == null && updated != null) return false;
if(existed != null && updated == null) return false;
for(String key:existed.keySet()){
if(existed.get(key).compareTo(updated.get(key)) != 0) return false;
}
return true;
}
答案 0 :(得分:1)
如果existed
和updated
都是null
,
然后程序将到达循环,existed.keySet()
将抛出NullPointerException
,这就是你收到警告的原因。
在循环之前,您应该添加条件以确保existed
不是null
。
private boolean isEqualCaptions(Map<String, String> existed, Map<String, String> updated) {
if (existed == null && updated != null) return false;
if (existed != null && updated == null) return false;
if (existed != null) {
for (String key : existed.keySet()) {
if (existed.get(key).compareTo(updated.get(key)) != 0) return false;
}
}
return true;
}
最后,条件A && !B || !A && B
可以使用XOR运算符简化为A ^ B
,因此前两个if
语句可以组合和简化:
private boolean isEqualCaptions(Map<String, String> existed, Map<String, String> updated) {
if (existed == null ^ updated == null) return false;
if (existed != null) {
for (String key : existed.keySet()) {
if (existed.get(key).compareTo(updated.get(key)) != 0) return false;
}
}
return true;
}