当前位置: 首页 > news >正文

26-Optional类

(1)今天做了什么:
今天看了Optional类。Optional是用来包装可能为null的值的容器,通过显式处理空值来避免空指针异常。创建方式有三种:of()传入非空值,如果为null会立即抛异常;ofNullable()接受可能为null的值;empty()创建空的Optional。C++17也有std::optional,概念上类似,但Java的Optional更强调作为返回值类型,不推荐作为字段或方法参数使用,这点和C++不太一样。

常用方法也看了一下。isPresent()判断是否有值,get()获取值但为空时会抛异常,所以get一般配合isPresent用。orElse()提供默认值,为空时返回默认值。orElseGet()接收Supplier,为空时惰性获取默认值,如果默认值创建成本高,用orElseGet更合适。orElseThrow()为空时抛出指定异常。ifPresent()接收Consumer,有值时执行操作,没有就不做。

map和flatMap在Optional里也有,和Stream里的map/flatMap类似。map把Optional里的值转换后包装成新的Optional,flatMap用于避免嵌套Optional。filter方法过滤不符合条件的值,为空时变成空Optional。这些方法配合起来可以链式处理,避免写多层if判断空值。

(2)明天准备做什么:
明天准备看日期时间API。Java 8引入了新的日期时间API,之前用Date和Calendar有些设计问题,听说新的API更合理,想具体看看LocalDate、LocalTime、LocalDateTime、Instant这几个类的用法。

(3)遇到的问题,如何解决:
今天遇到的主要问题是orElse和orElseGet的区别。刚开始以为一样,后来发现orElse无论Optional是否为空都会执行参数里的表达式,即使最终用不上。比如orElse(getDefaultValue()),即使Optional有值,getDefaultValue也会被调用,如果这个调用开销大或者有副作用就不好。orElseGet只有在Optional为空时才执行Supplier获取默认值。和C++的std::optional的value_or类似,但C++没有orElseGet这种惰性求值的写法。另外用Optional.of(null)直接报错,应该用ofNullable,这个错误写了一次就记住了。

http://www.jsqmd.com/news/1407148/

相关文章:

  • WindTerm深度体验:从SSH客户端到高效终端工作站的进阶指南
  • Linux系统最新版Docker安装与配置全流程指南
  • 第33篇 STL之stack与queue:BFS/DFS的标配数据结构,面试手写不过分吧
  • Claude Code移动端更新:触控优化与AI集成重塑移动编程体验
  • windows11更新缓存清理
  • OpenClaw与企业微信插件兼容性故障排查与解决方案
  • 腾讯云Lighthouse部署OpenClaw:低成本AI智能体云端部署实战指南
  • OpenClaw开源AI智能体框架部署与钉钉集成实战指南
  • 腾讯WorkBuddy框架实战:AI Agent无缝接入微信、飞书、钉钉全指南
  • 【无标题】大陆地区如何安装istio以及kind如何导入镜像
  • 江苏博格能源科技到底怎么样?2026年镇江这家锅炉厂的真实底子 - 新闻快传
  • 从Blob视频到M3U8流:前端流媒体下载原理与实战指南
  • 高阳县专业AI推广服务商推荐 保定热讯网络深耕纺织企业拓客 - 优质新闻发布
  • FreeSWITCH呼叫流程全解析:从SIP信令到媒体协商的实战指南
  • 【关注可白嫖源码】--课程设计--毕业设计--springboot个性化学习计划制定平台[编号:project89778](案件分析)
  • 老主板魔改NVMe启动失败复盘:从UEFI驱动加载原理到安全解决方案
  • 基于Python的腾讯文档自动化解析与邮件发送系统实战
  • Agent与opencalw在智慧油气田物联网中的架构设计与工程实践
  • 传统BIOS引导黑苹果实战:老硬件安装macOS Monterey完整指南
  • python数据可视化技巧的100个练习 -- 88. 使用 Plotly 创建瀑布图进行财务分析
  • Linux驱动开发:从Kconfig/Makefile到源码树集成的完整指南
  • 2026年厌氧罐企业选型参考:多场景适配厂商推荐 - 产品推荐官
  • 紧急预警!Gemini导出excel格式全崩?别手抄了!AI导出鸭正在疯狂打脸无效加班!
  • 计算机科学不是科学 | MIT 6.001
  • Effective Command-line Interface Fuzzing with Path-Aware Large Language Model Orchestration
  • ZYNQ学习ARM裸机笔记():VITIS
  • 苏州GEO优化靠谱公司供本地企业决策选型参考 - 招财兔数字员工
  • LVM逻辑卷管理器:在线扩容实战与运维避坑指南
  • 人才管理咨询机构收费对比及高性价比选择参考 - 招财兔数字员工
  • 无锡GEO优化服务选哪家助力B端企业高效选型 - 招财兔数字员工