声纳空指针违规

时间:2016-12-20 21:23:45

标签: java excel collections apache-poi

声纳在下面的行

下面给出空指针违规

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;
}

1 个答案:

答案 0 :(得分:1)

如果existedupdated都是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;
}