新闻详情

新闻详情

首页 / 资讯中心 / 详情

方法别再返回 null 了!Optional的4种高级模式

发布时间:2026/9/19 21:56:53来源:尧图网络
方法别再返回 null 了!Optional的4种高级模式
你还在写return null还在满屏if(obj null)Optional 不是简单的非空判断它是 Java 官方的空安全设计范式能让代码优雅、无空指针、可读性拉满。这篇直接给你4 种企业级高级用法彻底替代 null看完直接重构代码先记住一句话任何可能为空的方法坚决不返回 null一律返回 Optional坏代码publicUsergetUserById(Longid){returnnull;// 垃圾调用方必踩空指针}好代码publicOptionalUsergetUserById(Longid){returnOptional.empty();// 安全无空指针}一、高级模式 1安全获取值3 种标准写法彻底告别ifNull一行搞定非空判断。1.1 为空则抛异常最常用// 空则抛自定义异常UseruseruserService.getUserById(id).orElseThrow(()-newBusinessException(用户不存在));1.2 为空则返回默认值// 空则返回默认对象UseruseruserService.getUserById(id).orElse(newUser());1.3 为空则动态生成懒加载// 空才执行方法性能更高UseruseruserService.getUserById(id).orElseGet(()-createDefaultUser());二、高级模式 2链式消费不为空才执行空不执行非空才执行优雅到极致// 只有 user 不为空才会执行里面逻辑userService.getUserById(id).ifPresent(user-{// 执行业务逻辑user.setStatus(1);userRepository.update(user);});升级版空也处理userService.getUserById(id).ifPresentOrElse(user-log.info(找到用户),// 非空执行()-log.info(用户不存在)// 空执行);三、高级模式 3链式转换map/flatMap 无空穿透链式调用永远不怕空指针中间任何一步为 null直接返回空。// 传统写法地狱判空Stringcitynull;if(user!null){if(user.getAddress()!null){cityuser.getAddress().getCity();}}// Optional 链式写法一行无敌StringcityuserService.getUserById(id).map(User::getAddress)// 转换.map(Address::getCity)// 继续转换.orElse(未知城市);// 最终兜底任何一步为空都不会 NPE高级模式 4过滤 断言filter 条件判断满足条件才保留不满足则变空非常适合业务校验。userService.getUserById(id).filter(user-user.getStatus()1)// 只保留状态1的用户.ifPresentOrElse(u-log.info(用户有效),()-log.info(用户无效或不存在)); 终极实战返回 Optional 的标准业务方法企业级模板以后所有查询方法都这么写ServicepublicclassUserService{// 重点返回 Optional绝不返回 nullpublicOptionalUsergetUserById(Longid){UseruseruserMapper.selectById(id);// 包装成 Optional空→empty非空→ofNullablereturnOptional.ofNullable(user);}}调用方优雅到爆炸// 1. 获取不存在抛异常UseruseruserService.getUserById(id).orElseThrow(()-newRuntimeException(用户不存在));// 2. 链式获取属性StringusernameuserService.getUserById(id).map(User::getUsername).orElse(匿名); 3 个绝对不要犯的 Optional 错误不要用 Optional 作为成员变量不序列化坑死不要用 Optional 作为方法参数不规范不要 get()// 错误如果空依然会抛 NPEoptional.get()// 正确永远用 orElse/orElseGet/orElseThrow 总结背会这 4 句方法返回值用 Optional彻底告别 null获取值orElseThrow / orElse / orElseGet链式处理map 链式转换永不 NPE条件过滤filter 断言业务更简洁只要你按这个模式写你的代码里将永远不会出现空指针
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Worktrunk:用Git Worktree实现并行AI Agent工作区隔离 2026/9/20 6:42:18

Worktrunk:用Git Worktree实现并行AI Agent工作区隔离

最近在做 AI Agent 工程化落地时,我发现一个特别反直觉的现象:很多人每天花大量精力调 Prompt、选模型、搭 MCP 服务,但真正卡住并行 AI Agent 跑起来的,往往不是模型能力,也不是上下文窗口,而是一个最不起…

阅读更多 →
Nano Banana 2创意工作流优化与性能调优实战 2026/9/20 6:42:18

Nano Banana 2创意工作流优化与性能调优实战

1. 项目概述:Nano Banana 2的创意潜能挖掘Nano Banana 2这款口袋级创意工具正在改变内容创作者的工作方式。作为长期使用各类便携设备的从业者,我最初也被它仅信用卡大小的体积所迷惑,直到实际测试中发现其搭载的四核处理器和4GB内存能流畅运…

阅读更多 →
基于 docxtpl 的二手房买卖合同 Word 模板批量生成与校验归档 2026/9/20 6:42:18

基于 docxtpl 的二手房买卖合同 Word 模板批量生成与校验归档

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
智能车灯ADB矩阵光源模组:架构解析、调试标定与实战避坑指南 2026/9/20 6:42:18

智能车灯ADB矩阵光源模组:架构解析、调试标定与实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
具身智能教学平台技术解析与实践路径 2026/9/20 6:42:18

具身智能教学平台技术解析与实践路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
MATLAB P文件逆向工程与加密技术解析 2026/9/20 6:39:18

MATLAB P文件逆向工程与加密技术解析

1. MATLAB P文件逆向工程全解析在MATLAB生态中,P文件(Pre-parsed files)长期扮演着双重角色:既是提升代码执行效率的加速器,又是保护知识产权的加密手段。作为从业十余年的MATLAB开发者,我亲历过从早期简单…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞