欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA Optional类用法分享

程序员文章站 2024-02-21 22:55:04
optional在java中被定义为一个容器类,更确切的说只存一个元素的容器。 container object which may or may not contain...

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接口生成的异常