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

Java调用Map.getOrDefault报空指针错误的解决咨询

解决字典对象为null导致的NullPointerException问题

你的错误不是因为字典找不到键返回null,而是**Planner.dictionary本身就是null**,调用它的getOrDefault方法时触发了空指针异常。以下是几种处理方案:

1. 提前初始化字典对象

最根本的解决方式是确保Planner.dictionary在使用前被正确初始化,避免它成为null。比如在Planner类中声明时直接初始化:

// 在Planner类中定义字典时初始化
public class Planner {
    // 根据你的实际键类型替换LngLat
    public static Map<LngLat, Double> dictionary = new HashMap<>();
    // ...其他代码
}

或者在类的构造方法中初始化:

public class Planner {
    public static Map<LngLat, Double> dictionary;
    
    public Planner() {
        dictionary = new HashMap<>();
    }
    // ...其他代码
}

2. 调用前添加null检查

如果无法保证字典一定被初始化,就在调用getOrDefault前先判断字典是否为null,针对性处理:

double storedDistances;
if (Planner.dictionary == null) {
    // 字典为null时直接返回正无穷,符合你的业务预期
    storedDistances = Double.POSITIVE_INFINITY;
} else {
    storedDistances = Planner.dictionary.getOrDefault(lnglat, Double.POSITIVE_INFINITY);
}

也可以用三元表达式简化成一行代码:

double storedDistances = Planner.dictionary == null 
    ? Double.POSITIVE_INFINITY 
    : Planner.dictionary.getOrDefault(lnglat, Double.POSITIVE_INFINITY);

3. 使用Optional简化null处理(Java 8及以上)

利用Java 8引入的Optional类,可以更优雅地处理null对象:

double storedDistances = Optional.ofNullable(Planner.dictionary)
    .map(map -> map.getOrDefault(lnglat, Double.POSITIVE_INFINITY))
    .orElse(Double.POSITIVE_INFINITY);

这段代码的逻辑是:如果字典不为null,就调用getOrDefault;如果字典为null,直接返回正无穷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:23:22