新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/16 22:05:51来源:尧图网络
方法别再返回 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

相关资讯

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

较早相关资讯

最新相关资讯

萝卜泡泡米生产技术:让“小人参”在膨化机里开花 2026/9/17 20:40:52

萝卜泡泡米生产技术:让“小人参”在膨化机里开花

题记:“萝卜上市,医生没事;萝卜进城,药铺关门。”流传千年的民谚,藏着中国人对萝卜最深的情结。李时珍在《本草纲目》中赞它“可生可熟,可菹可酱,可豉可醋,可糖可腊,可饭…

阅读更多 →
CyberStrikeAI 浏览器扩展实战:在 DevTools 中捕获 Network 流量并驱动 AI 安全测试 2026/9/17 20:40:52

CyberStrikeAI 浏览器扩展实战:在 DevTools 中捕获 Network 流量并驱动 AI 安全测试

CyberStrikeAI 浏览器扩展实战:在 DevTools 中捕获 Network 流量并驱动 AI 安全测试 【免费下载链接】CyberStrikeAI The system of action for AI-native cybersecurity—where intent becomes governed execution, evidence becomes operational memory, and ever…

阅读更多 →
AZ-500题库解析:Azure AD Connect、PIM与容器网络安全管理实践 2026/9/17 20:40:52

AZ-500题库解析:Azure AD Connect、PIM与容器网络安全管理实践

简介:AZ-500 Exam微软ET_202409.pdf 面向微软认证专家(MCP)体系中备考Azure安全工程师方向的考生,聚焦Azure AD、特权身份管理(PIM)、身份验证与网络安全策略等核心考点。资料包为单个PDF文档,大…

阅读更多 →
C# 14与.NET 10核心技术解析与性能优化实践 2026/9/17 20:40:52

C# 14与.NET 10核心技术解析与性能优化实践

1. C# 14与.NET 10技术全景解析作为一名深耕.NET领域十余年的老开发者,我见证了C#从1.0到14的完整演进历程。这次C# 14的更新看似温和,实则暗藏玄机——它可能是近年来对开发者体验提升最显著的一个版本。结合.NET 10运行时和VS2026的加持,这…

阅读更多 →
百片成合,一粒爆开——知医邦百合泡泡米生产技术手记 2026/9/17 20:40:52

百片成合,一粒爆开——知医邦百合泡泡米生产技术手记

在植物界,大概没有哪个名字比“百合”更懂得讨人欢心。婚礼上它叫“百年好合”,花束里它是“云裳仙子”,情书里它是纯洁的暗号。可花店里的百合,与药店里的百合,其实是两个世界。能入药入膳的,是药食两用品…

阅读更多 →
GHelper 实战:华硕笔记本的轻量性能控制工具,三步替换奥创 2026/9/17 20:37:52

GHelper 实战:华硕笔记本的轻量性能控制工具,三步替换奥创

GHelper 实战:华硕笔记本的轻量性能控制工具,三步替换奥创 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobo…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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