您的位置:首页 >空指针异常怎么解决?Optional与空集合使用规范
发布于2026-04-21 阅读(0)
扫一扫,手机访问
应优先用 getOrDefault() 替代 get(),区分“键不存在”和“值为null”时才用 Optional.ofNullable();空集合统一用 Collections.emptyList();MyBatis 查询需声明返回 List<T> 以避免 null;Stream 中用 filter(Objects::nonNull) 或显式判空处理 null 元素。

get() 方法返回 null 导致 NPE 怎么办别直接调用 get() 后链式操作,比如 map.get("key").toString() —— 这是 NPE 高发区。核心不是“要不要用 Optional”,而是“谁该负责判空”。集合类(如 Map、List)本身不承诺非空,所以调用方必须处理缺失情况。
Map.getOrDefault(key, defaultValue) 替代 get(),尤其当默认值语义明确(如 0、""、Collections.emptyList())null”,才考虑 Optional.ofNullable(map.get(key)),但注意:这不能掩盖设计问题——Map 存 null 值本身就是反模式Optional 当容器传参或返回,它不是集合替代品;方法签名里出现 Optional<List<T>> 通常说明接口职责混乱new ArrayList<>() 还是 Collections.emptyList()用 Collections.emptyList()。它返回不可变空列表,内存零开销,且明确表达“这里就是没数据”,比新建对象更轻量、更安全。
Collections.emptyList() 是静态常量,线程安全,复用率高;new ArrayList<>() 每次都分配对象,GC 压力略增add() 或 set(),必须提前告知调用方这是只读集合,否则抛 UnsupportedOperationException[],无需额外配置null 而不是空集合,怎么统一处理在 Mapper 接口方法上加 @Options(flushCache = false, useCache = false) 没用;真正有效的是改 XML 的 resultType 或注解中的返回类型,并配合 MyBatis 的默认行为调整。
List<T>(而非 T),MyBatis 会自动返回空 ArrayList,不会为 selectList 类型返回 nullselectOne 场景(如 selectByPrimaryKey),MyBatis 默认查不到就返回 null —— 这时应在 Service 层包装:用 Optional.ofNullable(mapper.selectOne(id)),而不是让 Controller 直接拆箱<if test="list != null"> 判空,因为 MyBatis 已保证集合类型返回值永不为 nullNullPointerException 怎么快速定位不是 Stream 本身抛的,是中间操作里某个元素为 null,比如 list.stream().map(String::length).collect(...) 中有 null 字符串。
.filter(Objects::nonNull) 是最直接的防御手段,但要清楚过滤掉的是什么业务数据.map(item -> item == null ? 0 : item.length()) 显式处理,比抛异常更利于排查逻辑分支null;VS Code 需配合断点 + 中间变量提取Optional 重要得多。 上一篇:快手私信不让消息漂浮显示的方法其实很简单,主要是通过关闭“消息提醒”或调整通知设置。以下是具体步骤:方法一:关闭消息提醒(不显示浮动通知)打开快手App,进入主
下一篇:4399游戏盒关闭推荐方法详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9