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
相关产品推荐
相关产品推荐

