商城首页欢迎来到中国正版软件门户

您的位置:首页 >空指针异常怎么解决?Optional与空集合使用规范

空指针异常怎么解决?Optional与空集合使用规范

  发布于2026-04-21 阅读(0)

扫一扫,手机访问

应优先用 getOrDefault() 替代 get(),区分“键不存在”和“值为null”时才用 Optional.ofNullable();空集合统一用 Collections.emptyList();MyBatis 查询需声明返回 List<T> 以避免 null;Stream 中用 filter(Objects::nonNull) 或显式判空处理 null 元素。

如何解决集合中的空指针异常_使用Optional或空集合返回的规范

Java 中 get() 方法返回 null 导致 NPE 怎么办

别直接调用 get() 后链式操作,比如 map.get("key").toString() —— 这是 NPE 高发区。核心不是“要不要用 Optional”,而是“谁该负责判空”。集合类(如 MapList)本身不承诺非空,所以调用方必须处理缺失情况。

  • 优先用 Map.getOrDefault(key, defaultValue) 替代 get(),尤其当默认值语义明确(如 0""Collections.emptyList()
  • 若需区分“键不存在”和“键存在但值为 null”,才考虑 Optional.ofNullable(map.get(key)),但注意:这不能掩盖设计问题——Mapnull 值本身就是反模式
  • 避免把 Optional 当容器传参或返回,它不是集合替代品;方法签名里出现 Optional<List<T>> 通常说明接口职责混乱

Spring Boot 里 Controller 返回空集合该用 new ArrayList<>() 还是 Collections.emptyList()

Collections.emptyList()。它返回不可变空列表,内存零开销,且明确表达“这里就是没数据”,比新建对象更轻量、更安全。

  • Collections.emptyList() 是静态常量,线程安全,复用率高;new ArrayList<>() 每次都分配对象,GC 压力略增
  • 如果后续代码会尝试 add()set(),必须提前告知调用方这是只读集合,否则抛 UnsupportedOperationException
  • JSON 序列化(如 Jackson)对两者输出一致:[],无需额外配置

MyBatis 查询结果为空时返回 null 而不是空集合,怎么统一处理

在 Mapper 接口方法上加 @Options(flushCache = false, useCache = false) 没用;真正有效的是改 XML 的 resultType 或注解中的返回类型,并配合 MyBatis 的默认行为调整。

  • 确保方法声明返回 List<T>(而非 T),MyBatis 会自动返回空 ArrayList,不会为 selectList 类型返回 null
  • 如果是 selectOne 场景(如 selectByPrimaryKey),MyBatis 默认查不到就返回 null —— 这时应在 Service 层包装:用 Optional.ofNullable(mapper.selectOne(id)),而不是让 Controller 直接拆箱
  • 不要在 XML 里写 <if test="list != null"> 判空,因为 MyBatis 已保证集合类型返回值永不为 null

Stream 处理集合时遇到 NullPointerException 怎么快速定位

不是 Stream 本身抛的,是中间操作里某个元素为 null,比如 list.stream().map(String::length).collect(...) 中有 null 字符串。

  • .filter(Objects::nonNull) 是最直接的防御手段,但要清楚过滤掉的是什么业务数据
  • .map(item -> item == null ? 0 : item.length()) 显式处理,比抛异常更利于排查逻辑分支
  • IDEA 调试时,在 Stream 链上右键 “Trace Current Stream Chain”,能直观看到哪一步输入是 null;VS Code 需配合断点 + 中间变量提取
空集合返回本身不难,难的是所有人对“空”的理解是否一致——有人觉得空集合=无数据,有人觉得空集合=查询失败,还有人把它当错误信号。接口文档里写清楚“返回空集合代表什么”,比代码里多套一层 Optional 重要得多。
本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注