声纳在下面的行下面给出了空指针冲突
存在.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;
}
最佳答案
如果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;
}
最后,可以使用XOR运算符作为
A && !B || !A && B
简化条件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;
}
关于java - 声纳空指针冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41251480/