新闻详情

新闻详情

首页 / 资讯中心 / 详情

方法别再返回 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

相关资讯

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

较早相关资讯

最新相关资讯

OpenClaw 从零部署,模型通道改到 TaoToken 通道能行吗? 2026/9/19 21:55:54

OpenClaw 从零部署,模型通道改到 TaoToken 通道能行吗?

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

阅读更多 →
401 认证失败?TaoToken + Aider 这样验证 2026/9/19 21:55:54

401 认证失败?TaoToken + Aider 这样验证

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

阅读更多 →
DeepSeek 在 Codex 里报 401?TaoToken 这样配 Base URL 2026/9/19 21:55:54

DeepSeek 在 Codex 里报 401?TaoToken 这样配 Base URL

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

阅读更多 →
Hugo 短代码中的 .Site:详解 SHORTCODE.Site 方法及 Site 对象全能力 2026/9/19 21:55:54

Hugo 短代码中的 .Site:详解 SHORTCODE.Site 方法及 Site 对象全能力

Hugo 短代码中的 .Site:详解 SHORTCODE.Site 方法及 Site 对象全能力 【免费下载链接】hugo The world’s fastest framework for building websites. 项目地址: https://gitcode.com/gh_mirrors/hu/hugo 导读 在 Hugo 短代码(Shortcode&#xf…

阅读更多 →
用Python将Word习题答案转化为结构化数据资产 2026/9/19 21:55:54

用Python将Word习题答案转化为结构化数据资产

简介:《汽车理论》课后习题答案解析文档,适合车辆工程、交通运输等专业学生及备考人员使用。文档围绕汽车动力性分析、驱动力与行驶阻力平衡、变速器档位选择、空气阻力与滚动阻力、转动惯量、爬坡度与附着率等核心章节,对第一章“汽车的动力…

阅读更多 →
基于STM32和微信小程序的宠物自动喂养系统设计 2026/9/19 21:52:53

基于STM32和微信小程序的宠物自动喂养系统设计

简介:设计资料围绕基于STM32的猫狗宠物喂养系统展开,面向物联网嵌入式学习者、电子设计竞赛参赛者及智能宠物硬件开发者,完整呈现从需求分析到系统落地的全流程方案。内容基于STM32F103RCT6主控,结合ESP8266 WiFi模块、28BYJ4步进…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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