声纳在下面的行下面给出了空指针冲突

存在.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;
}

最佳答案

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


最后,可以使用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/

10-11 23:07