【面试题精讲】JavaOptional用法
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
Java 8 引入了 Optional 类,用于解决空指针异常(NullPointerException)的问题。Optional 是一个容器类,可以包含一个非空的值或者表示值不存在。通过使用 Optional,我们可以更加优雅地处理可能为空的值,避免了繁琐的空值检查和异常处理。
下面是 Optional 类的一些常用方法和用法:
创建
Optional对象:- 使用
Optional.of(value):创建一个包含指定值的Optional对象。如果传入的值为null,则会抛出NullPointerException。 - 使用
Optional.ofNullable(value):创建一个包含指定值的Optional对象。如果传入的值为null,则会创建一个空的Optional对象。 - 使用
Optional.empty():创建一个空的Optional对象。
- 使用
判断值是否存在:
- 使用
isPresent()方法:判断Optional对象中是否包含值。如果值存在,返回true;否则,返回false。
- 使用
获取值:
- 使用
get()方法:获取Optional对象中的值。如果值存在,返回该值;否则,抛出NoSuchElementException异常。在使用get()方法之前,最好先使用isPresent()方法进行判断。
- 使用
处理值不存在的情况:
- 使用
ifPresent(Consumer<? super T> consumer)方法:如果值存在,则执行指定的操作。可以传入一个Consumer函数式接口,用于处理值存在的情况。 - 使用
orElse(T other)方法:如果值不存在,则返回指定的默认值。 - 使用
orElseGet(Supplier<? extends T> supplier)方法:如果值不存在,则通过指定的供应函数获取一个默认值。 - 使用
orElseThrow(Supplier<? extends X> exceptionSupplier)方法:如果值不存在,则抛出指定的异常。
- 使用
下面是一个简单的示例,展示了 Optional 的用法:
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String value = "Hello, World!";
// 创建 Optional 对象
Optional<String> optional = Optional.of(value);
// 判断值是否存在
boolean isPresent = optional.isPresent();
System.out.println("Value is present: " + isPresent);
// 获取值
String retrievedValue = optional.get();
System.out.println("Retrieved value: " + retrievedValue);
// 处理值存在的情况
optional.ifPresent(v -> System.out.println("Value exists: " + v));
// 处理值不存在的情况
String defaultValue = optional.orElse("Default Value");
System.out.println("Default value: " + defaultValue);
// 使用函数式接口处理值不存在的情况
String suppliedValue = optional.orElseGet(() -> "Supplied Value");
System.out.println("Supplied value: " + suppliedValue);
// 抛出异常处理值不存在的情况
try {
String thrownValue = optional.orElseThrow(() -> new RuntimeException("Value not found"));
System.out.println("Thrown value: " + thrownValue);
} catch (RuntimeException e) {
System.out.println("Exception: " + e.getMessage());
}
}
}
在这个示例中,我们创建了一个包含字符串值的 Optional 对象,并演示了判断值是否存在、获取值、处理值存在和值不存在的情况的用法。
使用 Optional 可以提高代码的可读性和健壮性,避免了繁琐的空值检查和异常处理。但需要注意的是,不要滥用 Optional,在某些情况下,使用传统的空值检查可能更加合适。
本文由mdnice多平台发布
【面试题精讲】JavaOptional用法的更多相关文章
- javascript之面试题精讲
from:http://blog.csdn.net/q121516340/article/details/51332454 1,检测数组的几种方式: Array.isArray(); es5 toSt ...
- 【我给面试官画饼】Python自动化测试面试题精讲
那今天给家分享的是一个面试主题. 就比如说我们的自动化测试,自动化如何去应对面试官,和面试官去聊一聊自动化的心得,自动化你现在去面试的时候是一个非常重要的一个关键点,所以如果你在这方面有一定的心得.那 ...
- 微软BI SSIS 2012 ETL 控件与案例精讲面试 200 问(SSIS 面试题,ETL 面试题)
开篇介绍 本自测与面试题出自 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程,对于学完本课程的每一课时和阅读完相关辅助 ...
- 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- Linux实战教学笔记18:linux三剑客之awk精讲
Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...
- 微软BI SSIS 2012 ETL 控件与案例精讲课程学习方式与面试准备详解
开篇介绍 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院 ...
- Java并发编程核心知识体系精讲
第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点 ...
- 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记
VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
随机推荐
- Python——第二章:单引号(')、双引号(")、花括号 {}的用法及注意事项
在Python中,字符串可以用单引号(')或双引号(")括起来,它们在用法上没有本质区别.你可以根据个人偏好来选择使用单引号或双引号来创建字符串. 例如: 使用单引号括起的字符串: prin ...
- Shiro 的基本使用
简介 Apache Shiro 是一个强大的.灵活的开源安全框架,可以干净地处理验证.授权.企业会话管理和加密等功能 相关特性 Apache Shiro 具有的主要特性如下图所示: 主要关注的地方在于 ...
- Mysql在sql中截取时间类型字段的年月日和时间
DATE_FORMAT() 函数 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式.我们使用 NOW() 来获得当 ...
- Caffeine Cache缓存
SpringBoot 集成 Caffeine Caffeine 和 Spring Cache 依赖,使用注解方法实现缓存 依赖 <!--提供 Spring Boot 中的缓存支持--> & ...
- 十分钟从入门到精通(上)——OBS权限配置
[摘要]作为公有云的数据底座,大量的应用场景产生的数据都会存储到OBS对象存储服务中,如直播.电商.大数据可视化.机器学习.物联网等.作为公有云的海量存储基础服务, OBS提供了灵活的权限配置功能,解 ...
- CANN 5.0黑科技解密 | 算力虚拟化,让AI算力“物尽其用”
摘要:算力虚拟化技术对消费者而言,可有效降低算力的使用成本,对于设备商或运营商而言,则可极大提升算力资源的利用率,降低设备运营成本. 为什么要做算力虚拟化 近年来,人工智能领域呈井喷式发展,算力就是生 ...
- 克魔助手:方便查看iPhone应用实时日志和奔溃日志工具
克魔助手:方便查看iPhone应用实时日志和奔溃日志工具 查看ios app运行日志 摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具,该工具可以方便地查看iPhone设备上应用和系统运行 ...
- 以 100GB SSB 性能测试为例,通过 ByteHouse 云数仓开启你的数据分析之路
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 I. 传统数仓的演进:云数仓 近年来,随着数据"爆炸式"的增长,越来越多的数据被产生.收集和存 ...
- Solon2 开发之IoC,五、Bean 扫描的三种方式
1.启动时扫描 package org.example.demo; public class DemoApp{ public static void main(String[] args){ // / ...
- MongoDB 读写分离——Windows MongoDB 副本集配置
本文基于:MongoDB 读写分离--MongoDB 安装 参考:https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-tes ...