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

Java中从HashMap对象取值时触发NullPointerException异常怎么处理?

问题根因

你收到的 java.lang.NullPointerException: null 报错翻译为中文为:Java 空指针异常,触发原因是代码中调用了 null 对象的属性或方法。结合你给出的DTO结构、代码、JSON示例,有三个明确的问题点会触发该报错:

  • DTO字段无默认初始化:Datas类的details字段、Details类的data HashMap字段都没有做初始化,若反序列化框架没有自动创建实例的配置,两个字段默认值为null,调用时直接触发空指针。
  • 方法名不符合Java规范:你链式调用中写的Details()是错误的,标准Java getter方法为驼峰命名,应为getDetails(),方法名错误会导致取值为null。
  • HashMap取值key与JSON不匹配:你给出的JSON示例中,data Map的key是12345,但代码中用get("data")取值,取不到对应值会返回null,后续调用getName()直接触发空指针。

修复方案

1. 给DTO字段添加默认初始化

class Datas{
    // 初始化details避免空对象
    private Details details = new Details();
    // 补充getter方法
    public Details getDetails() {
        return details;
    }
}

class Details{
    // 初始化HashMap避免空对象
    private HashMap<String, Data> data = new HashMap<>();
    // 补充getter方法
    public HashMap<String, Data> getData() {
        return data;
    }
}

class Data{
    private String name;
    private String id;
    // 补充getter方法
    public String getName() {
        return name;
    }
}

2. 修正链式调用并添加空值防护

Java 8及以上版本推荐用Optional做链式判空,避免多层if判断:

String description = Optional.ofNullable(item.get(i))
        .map(Item::getDatas)
        .map(Datas::getDetails)
        .map(Details::getData)
        // 替换为JSON中实际的key,示例为12345
        .map(dataMap -> dataMap.get("12345"))
        .map(Data::getName)
        // 空值时返回默认值,可自定义
        .orElse("默认描述");
information.setDescription(description);

低版本Java可使用逐层判空写法:

String description = "";
if (item.get(i) != null && item.get(i).getDatas() != null) {
    Datas datas = item.get(i).getDatas();
    if (datas.getDetails() != null && datas.getDetails().getData() != null) {
        Data targetData = datas.getDetails().getData().get("12345");
        if (targetData != null) {
            description = targetData.getName();
        }
    }
}
information.setDescription(description);

内容的提问来源于stack exchange,提问作者welcome_java

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:51:02