有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址

文章更新计划

系列文章地址


Java 8 引入了 Optional 类,用于解决空指针异常(NullPointerException)的问题。Optional 是一个容器类,可以包含一个非空的值或者表示值不存在。通过使用 Optional,我们可以更加优雅地处理可能为空的值,避免了繁琐的空值检查和异常处理。

下面是 Optional 类的一些常用方法和用法:

  1. 创建 Optional 对象:

    • 使用 Optional.of(value):创建一个包含指定值的 Optional 对象。如果传入的值为 null,则会抛出 NullPointerException
    • 使用 Optional.ofNullable(value):创建一个包含指定值的 Optional 对象。如果传入的值为 null,则会创建一个空的 Optional 对象。
    • 使用 Optional.empty():创建一个空的 Optional 对象。
  2. 判断值是否存在:

    • 使用 isPresent() 方法:判断 Optional 对象中是否包含值。如果值存在,返回 true;否则,返回 false
  3. 获取值:

    • 使用 get() 方法:获取 Optional 对象中的值。如果值存在,返回该值;否则,抛出 NoSuchElementException 异常。在使用 get() 方法之前,最好先使用 isPresent() 方法进行判断。
  4. 处理值不存在的情况:

    • 使用 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用法的更多相关文章

  1. javascript之面试题精讲

    from:http://blog.csdn.net/q121516340/article/details/51332454 1,检测数组的几种方式: Array.isArray(); es5 toSt ...

  2. 【我给面试官画饼】Python自动化测试面试题精讲

    那今天给家分享的是一个面试主题. 就比如说我们的自动化测试,自动化如何去应对面试官,和面试官去聊一聊自动化的心得,自动化你现在去面试的时候是一个非常重要的一个关键点,所以如果你在这方面有一定的心得.那 ...

  3. 微软BI SSIS 2012 ETL 控件与案例精讲面试 200 问(SSIS 面试题,ETL 面试题)

    开篇介绍 本自测与面试题出自 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程,对于学完本课程的每一课时和阅读完相关辅助 ...

  4. 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  5. Linux实战教学笔记12:linux三剑客之sed命令精讲

    第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...

  6. Linux实战教学笔记18:linux三剑客之awk精讲

    Linux三剑客之awk精讲(基础与进阶) 标签(空格分隔): Linux实战教学笔记-陈思齐 快捷跳转目录: * 第1章:awk基础入门 * 1.1:awk简介 * 1.2:学完awk你可以掌握: ...

  7. 微软BI SSIS 2012 ETL 控件与案例精讲课程学习方式与面试准备详解

    开篇介绍 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院  ...

  8. Java并发编程核心知识体系精讲

    第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点 ...

  9. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

  10. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

随机推荐

  1. 断言可Cookie管理器

    断言可以判断预期结果和实际结果是否一致 可以辅助判断脚本的运行结果是否正确 cookie管理器 记录用户的cookie信息 可以自动记录cookie,也可以使用用户自定义的cookie

  2. Python——第二章:字符串操作——索引和切片

    索引: 按照位置提取元素 可以采用索引的方式来提取某一个字符(文字) s = "我叫周杰伦" print(s[3]) #程序员都是从0开始数,这里的3代表第4位,也就是" ...

  3. Recursion Function 递归笔记

    递归的解释: 递归(英语:Recursion),又译为递回, 在数学与计算机科学中,是指在函数的定义中使用函数自身的方法.(本文要讨论的重点) 递归一词还较常用于描述以自相似方法重复事物的过程.(指一 ...

  4. 前端系列:正则表达式RegExp详解

    目录 正则创建 匹配方法 元字符 字符集合 边界 分组 数量词汇 匹配模式 RegExp 方法特性 正则创建 字面量创建 const str = 'asdf123sds3234' const rege ...

  5. JavaImprove--Lesson04--LocalDateTime,ZoneId,Instant,DateTimeFormatter

    一.LocalDateTime LocalDateTime是JDK8的新时间特性,它解决了Date类和Calender类的很多不足,如使用不方便,线程不安全,以及获取时间戳只能拿到毫秒而不能拿到纳秒等 ...

  6. 神经网络基础篇:关于 python_numpy 向量的说明(A note on python or numpy vectors)

    关于 python_numpy 向量的说明 主要讲Python中的numpy一维数组的特性,以及与行向量或列向量的区别.并说一下在实际应用中的一些小技巧,去避免在coding中由于这些特性而导致的bu ...

  7. 【技术总结】从Hash索引到LSM树

    摘要:本文将从实现最简单的Key-Value数据库讲起,然后针对实现过程中遇到的一些瓶颈,采用上述的索引技术,对数据库进行优化,以此达到对数据库的索引技术有一个较为深刻的理解. 前言 数据库算是软件应 ...

  8. 云小课|大数据时代的隐私利器-GaussDB(DWS)数据脱敏

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 数据仓库服务Ga ...

  9. 万字长文|Hadoop入门笔记(附资料)

    大数据迅速发展,但是Hadoop的基础地位一直没有改变.理解并掌握Hadoop相关知识对于之后的相关组件学习有着地基的作用.本文整理了Hadoop基础理论知识与常用组件介绍,虽然有一些组件已经不太常用 ...

  10. APP加固原理与作用

    APP加固原理与作用 引言 在移动应用开发中,APP加固是一种保护应用代码逻辑的重要措施.通过对应用文件进行隐藏.混淆和加密等操作,可以有效提高软件的逆向成本,降低被破解的几率.本文将介绍APP加固的 ...