检查 key 是否存在于 Map 后,拆箱可能会产生 Null Pointer Exception

Unboxing may produce Null Pointer Exception after checking if key exists in Map

Android Studio 发出警告:Unboxing of 'idCollisonMap.get(currentId)' may produce 'NullPointerException' 即使我在执行 Map.get() 之前检查密钥是否存在。

我真的有 运行 进入空指针异常的危险吗?我的理解是 .containsKey() 检查可以防止这种情况发生。

Map<String, Integer> idCollisonMap = new HashMap<>();

// All IDs to map
for (MyObject object : objectsWithIdList) {

    // Use the id as the key
    String currentId = object.getId();

    // First check if the ID is null
    if (currentId != null) {
        if (idCollisonMap.containsKey(currentId)) {
            // This ID already exists in the map,  increment value by 1
            idCollisonMap.put(currentId, idCollisonMap.get(currentId) + 1);
        } else {
            // This is a new ID,  create a new entry in the map
            idCollisonMap.put(currentId, 1);
        }
    }
}

代码片段示例输出:

[{T143=1, T153=3, T141=1}]

假设没有其他东西在修改地图,并且如果地图从不包含空值,这对我来说看起来很安全 - 但您可以避免警告 and be more efficient at the同时,通过无条件调用 get 并使用结果来处理丢失的键:

Integer currentCount = idCollisionMap.get(currentId);
Integer newCount = currentCount == null ? 1 : currentCount + 1;
idCollisionMap.put(newCount);