新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/2 19:13:12来源:尧图网络
方法别再返回 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/2 19:11:41

三极管核心原理与实战:从水龙头比喻到开关放大电路设计

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

阅读更多 →
OpenBLAS 0.3.9 集成实战:矩阵运算性能调优与部署指南 2026/9/2 19:11:41

OpenBLAS 0.3.9 集成实战:矩阵运算性能调优与部署指南

简介:OpenBLAS 0.3.9 是面向高性能数值计算的开源线性代数库,专为多核处理器优化,广泛用于科学计算、机器学习与计算机视觉。这份Win10平台预编译压缩包,内置DLL、LIB及头文件,开发者可直接将其集成至Visual Studio等项…

阅读更多 →
从二进制理解静态分析:逆向工程入门实战指南 2026/9/2 19:11:41

从二进制理解静态分析:逆向工程入门实战指南

很多想入门逆向工程、走安全方向的小伙伴,都会遇到同一个问题:资料很多,但都默认你已经有一定基础。要么上来就甩 IDA、x64dbg 的界面截图,要么直接讲壳和脱壳,结果看两页就劝退了。本文从最底层的二进制讲起&#xff…

阅读更多 →
DeepSeek Harness插件开发实战:从环境搭建到企业级落地 2026/9/2 19:11:41

DeepSeek Harness插件开发实战:从环境搭建到企业级落地

DeepSeek Harness 插件开发,是不少 AI 应用团队在把 DeepSeek 模型能力沉淀成可复用业务模块时,重点关注的工程方向之一。早期团队通常直接通过 API 调用模型,把返回结果拼进业务界面,这种方式在演示阶段没有问题;可一…

阅读更多 →
自研跨平台Minecraft启动器:技术选型、模块划分与排障实战 2026/9/2 19:11:41

自研跨平台Minecraft启动器:技术选型、模块划分与排障实战

这段时间我一直在做一件事:自己写一个跨平台 Minecraft 启动器。不是把现成启动器换个皮肤,而是从版本管理、Java 环境探测、Mod 加载、实例隔离到进程托管,全部重新设计一遍。做完之后最直观的感受是,一个启动器的难点根本不在“…

阅读更多 →
甜向cut制作指南:从高效搜索到专业剪辑的完整流程 2026/9/2 19:08:41

甜向cut制作指南:从高效搜索到专业剪辑的完整流程

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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