You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:18:02