使用Java Map.of存入null值触发空指针异常NPE该如何修复
问题根因
你遇到的空指针异常并非来自Objects.equals逻辑,而是Map.of()的内置限制:Java 9+ 提供的Map.of()方法生成的是不可变映射实例,禁止传入null作为key或value。你的secondMap中存在verbose对应的value为null,当遍历到该key时,secondMap.get(s)返回null并传入Map.of(),就触发了内置的非空校验抛出异常。
修复方案
方案1:改用支持null值的HashMap存储差异项
把原diffList.add行替换为如下实现即可,HashMap原生支持value为null,无需额外修改业务逻辑:Map<String, Object> diffMap = new HashMap<>(); diffMap.put(s, "changed"); diffMap.put("oldValue", firstMap.get(s)); diffMap.put("newValue", secondMap.get(s)); diffList.add(diffMap);方案2:null值替换为占位符(适配不可变Map场景)
如果你要求差异项必须是不可变Map,可以提前把null值替换为业务侧可识别的占位符:Object oldVal = firstMap.get(s) == null ? "[null]" : firstMap.get(s); Object newVal = secondMap.get(s) == null ? "[null]" : secondMap.get(s); diffList.add(Map.of(s, "changed", "oldValue", oldVal, "newValue", newVal));
内容的提问来源于stack exchange,提问作者zxcfawn
相关产品推荐
相关产品推荐

