JAVA 中的Optional类详解

2024-09-08 11:28
文章标签 java 详解 optional

本文主要是介绍JAVA 中的Optional类详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JAVA 中的Optional类详解

一、引言

Java 8 引入了 Optional 类,旨在提供一种更优雅的方式来处理可能为 null 的情况,从而避免 NullPointerExceptionOptional 是一个容器对象,它可能包含也可能不包含非空值。使用 Optional 可以显著减少代码中的 null 检查,使代码更加简洁和安全。

二、Optional 类的基本概念

1、创建 Optional 实例

Optional 类提供了多种创建实例的方法:

  • empty():创建一个空的 Optional 实例。
  • of(T value):创建一个包含非空值的 Optional 实例。如果传入 null,会抛出 NullPointerException
  • ofNullable(T value):创建一个可能包含 nullOptional 实例。
1.1、示例代码
Optional<String> empty = Optional.empty(); // 空实例
Optional<String> name1 = Optional.of("ning"); // 非空实例
Optional<String> name2 = Optional.ofNullable(null); // 空实例

2、访问 Optional 中的值

  • get():如果 Optional 非空,返回值,否则抛出 NoSuchElementException
  • isPresent():检查 Optional 是否包含非空值。
  • ifPresent(Consumer<? super T> consumer):如果 Optional 非空,执行给定的 consumer
2.1、示例代码
Optional<String> name = Optional.of("ning");
if (name.isPresent()) {System.out.println("Name: " + name.get());
}name.ifPresent(System.out::println); // 打印 "ning"

三、Optional 类的高级用法

1、orElse 和 orElseGet

  • orElse(T other):如果 Optional 非空,返回值,否则返回指定的默认值。
  • orElseGet(Supplier<? extends T> other):如果 Optional 非空,返回值,否则返回由 Supplier 函数提供的值。
1.1、示例代码
Optional<String> name = Optional.ofNullable(null);
String defaultName = name.orElse("Default Name"); // 使用默认值
String lazyName = name.orElseGet(() -> "Lazy " + "Name"); // 延迟计算默认值

2、异常处理

  • orElseThrow(Supplier<? extends X> exceptionSupplier):如果 Optional 非空,返回值,否则抛出由 Supplier 函数提供的异常。
2.1、示例代码
Optional<String> name = Optional.ofNullable(null);
name.orElseThrow(() -> new IllegalArgumentException("Name cannot be null"));

四、总结

Optional 类是 Java 8 引入的一个非常有用的特性,它提供了一种更安全、更优雅的方式来处理可能为 null 的情况。通过使用 Optional,我们可以减少代码中的 null 检查,使代码更加简洁和易于维护。同时,Optional 类还提供了丰富的方法,如 orElseorElseGetorElseThrow,使得在不同场景下处理 Optional 变得更加灵活。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • JAVA 中的Optional类理解、学习与使用
  • Java 8 Optional 类

这篇关于JAVA 中的Optional类详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147978

相关文章

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5