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

Java基础——Optional

Optional 类主要解决的问题是臭名昭著的空指针异常NPE(NullPointerException)
在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:

String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查:

if (user != null) {Address address = user.getAddress();if (address != null) {Country country = address.getCountry();if (country != null) {String isocode = country.getIsocode();if (isocode != null) {isocode = isocode.toUpperCase();}}}
}

使用Optional可以精简代码,降低复杂度:

String result = Optional.ofNullable(user).flatMap(User::getAddress).flatMap(Address::getCountry).map(Country::getIsocode).orElse("default");

Optional 创建

创建 Optional 对象主要三种:
● Optional.of(T t):创建一个 Optional 对象,参数 t 必须非空;
● Optional.empty():创建一个空的Optional实例;
● Optional.ofNullable(T t):创建一个Optional对象,参数t 可以为 null。

  • empty(): 尝试访问 emptyOpt 变量的值会导致 NoSuchElementException。
Optional<User> emptyOpt = Optional.empty();
emptyOpt.get();
  • of(): 如果user为空,会抛出NullPointerException。
Optional<User> opt = Optional.of(user);
  • ofNullable(): 如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法。
Optional<User> opt = Optional.ofNullable(user);

相关文章:

  • Vue框架-路由
  • vuejs路由和组件系统
  • 算法-可完成的最大任务数
  • Linux防火墙(以iptables为例)
  • 十种常用数据分析模型
  • 万界星空科技定制化MES系统帮助实现数字化生产
  • 自建公式,VBA在Excel中解一元一次方程
  • docker命令总结
  • upload-labs 21关解析
  • 手把手教你写Java项目(1)——流程
  • 什么是深拷贝和浅拷贝?
  • 微服务架构的优势 与 不足
  • 常见排序算法之选择排序
  • 内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机
  • 微信生态系统介绍
  • [iOS]Core Data浅析一 -- 启用Core Data
  • angular2开源库收集
  • CEF与代理
  • Docker: 容器互访的三种方式
  • node学习系列之简单文件上传
  • SegmentFault 2015 Top Rank
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Web设计流程优化:网页效果图设计新思路
  • 给github项目添加CI badge
  • 记一次删除Git记录中的大文件的过程
  • 类orAPI - 收藏集 - 掘金
  • 使用 QuickBI 搭建酷炫可视化分析
  • 新手搭建网站的主要流程
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #{}和${}的区别是什么 -- java面试
  • #if 1...#endif
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (三)终结任务
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)C#调用WebService 基础
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET MVC第三章、三种传值方式
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET连接数据库方式
  • @Autowired和@Resource的区别
  • @PostConstruct 注解的方法用于资源的初始化
  • @requestBody写与不写的情况
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @SpringBootApplication 包含的三个注解及其含义
  • @Transactional类内部访问失效原因详解