JAVA Optional类用法分享
作者:laozhang 发布时间:2022-01-07 02:36:08
标签:JAVA,Optional类
Optional在JAVA中被定义为一个容器类,更确切的说只存一个元素的容器。
container object which may or may not contain a non-null value.
Optional类结构 Optional属性
Optional类中包含两个属性:
类属性:EMPTY 对象属性:value
EMPTY属性用来存放一个value为null的Optional对象。
value属性用来存放非null对象。
Optional方法
Optional的有两个构造方法,都被private修饰。
private Optional() {
this.value = null;
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
无参构造方法用来初始化EMPTY。有参构造方法用来初始化非null对象。
因为构造方法被修饰为私有的,Optional想要实例化对象只能通过类方法调用。Optional提供三个类方法。
empty:返回value为null的Optional对象 of:返回value非null的Optional对象 ofNullable:value的值根据参数是否为null返回对应的Optional对象
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
实例方法介绍
方法 | 参数类型 | 返回类型 | 说明 | |
---|---|---|---|---|
get | 无 | T | value为null抛出NoSuchElementException异常 | |
isPresent | 无 | boolean | value为null则返回false | |
ifPresent | Consumer<? super T> | void | 如果Optional实例有值则为其调用consumer,否则不做处理 | |
filter | Predicate<? super T> | Optional<T> | 如果值存在并且满足提供的谓词,就返回包括该值的Optional对象;否则返回一个空的Optional对象 | |
map | Function<? super T, ? extends U> | Optional<U> | 如果值存在,就对该值执行提供的mapping函数调用,返回Optional<U>对象 | |
flatMap | Function<? super T, Optional<U>> | Optional<U> | 如果值存在,就对该值执行提供的mapping函数调用,返回非null Optional对象 | |
orElse | T | T | 如果有值则将其返回,否则返回一个默认值 | |
orElseGet | Supplier<? extends T> | T | 如果有值则将其返回,否则返回一个由指定的Supplier接口生成的值 | |
orElseThrow | Supplier<? extends X> | <X extends Throwable> | 如果有值则将其返回,否则抛出一个由指定的Supplier接口生成的异常 |


猜你喜欢
- springboot 启动项目打印接口列表环境springboot 2.3.2.RELEASE修改配置文件logging: le
- 因为最近重新看了泛型,又看了些反射,导致我对Object、T(以下代指泛型)、?产生了疑惑。我们先来试着理解一下Object类,学习Java
- 依赖让我们先把 zip4j 依赖关系添加到我们的 pom.xml 文件中。<dependenc
- class文件中的常量池之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢?字符串常量,类
- StringUtils.isBlank()的使用在校验一个String类型的变量是否为空时,可以使用StringUtils.isBlank方
- 前言Set 表示由无重复对象组成的集合,也是集合框架中重要的一种集合类型,直接扩展自 Collection 接口。在一个 Set 中,不能有
- 本文实例讲述了C#实现AddRange为数组添加多个元素的方法。分享给大家供大家参考。具体实现方法如下:ArrayList ab = new
- isInstance和isAssignableFromobj instanceof Class判断obj是不是Class或者Class的子类
- 本文实例为大家分享了Unity实现切割图集工具的具体代码,供大家参考,具体内容如下操作步骤先将脚本拖入Editor1.选中要切割的图片,te
- 首先我们要明白一下几点,1.代码写出来除了让他跑起来还有个非常非常重要的作用是维护,因为没有一成不变的代码,需求变化代码就不可避免的要变化。
- 1.什么是继承?(1)用来提高代码的复用性(2)将相同的功能模块封装到方法中需要使用时调用方法达到代码复用的目的(3)通过继承将多个类中的相
- 泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码
- 使用 try/catch 处理异常try-catch 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决
- 有一位程序员去相亲的时候,非常礼貌得说自己是一名程序员,并解释自己是做底层架构的,于是女方听到"底层"两个字,就一脸嫌弃
- 今天要分享一个非常简单的功能:使用Android原生控件Gallery实现照片拖动的特效实现思路如下:在布局文件中定义一个Gallery控件
- 很多时候我们用HTML布局会更方便直接,记录一下。我现在主要是直接调用服务器的网页(实际上是jsp的,只是返回的是html),所以需要联网,
- 1.阻塞I/O模型阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为:1.1在用户线程发出IO请求之后,内
- java进行时间转换成unix timestamp的具体代码,供大家参考,具体内容如下import java.text.DateFormat
- 环境准备创建 Maven 项目创建服务器远程连接Tools------Delployment-----Browse Remote Host设
- Statement 和 PreparedStatement之间的关系和区别. 关系:Prepa