跳至主要內容

Optional类

Mr.Hope...大约 2 分钟

Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避 免Null检查,防止NullpointerException,

对象的创建方式

public static void main(String[] args) {
    // 第一种方式 通过of方法  of方法是不支持null的
    Optional<String> op1 = Optional.of("gyb");
    //Optional<Object> op2 = Optional.of(null);
    // 第二种方式通过 ofNullable方法 支持null
    Optional<String> op3 = Optional.ofNullable("gyb");
    Optional<Object> op4 = Optional.ofNullable(null);

    // 第三种方式 通过empty方法直接创建一个空的Optional对象
    Optional<Object> op5 = Optional.empty();
}

常用方法

1. get

用于获取 Optional 对象中的值。如果 Optional 对象为空,则会抛出 NoSuchElementException 异常。

具体含义如下:

  • 如果 Optional 对象中存在值,则返回该值。
  • 如果 Optional 对象为空,则抛出 NoSuchElementException 异常。
public T get()

使用

Optional<String> optional = Optional.of("value");

// 如果optional中有值,则返回该值,否则抛出NoSuchElementException异常
String result = optional.get();

2. orElse

用于获取 Optional 对象中的值,如果该值不存在(即 Optional 对象为空),则返回指定的默认值。

具体含义如下:

  • 如果 Optional 对象中存在值,则返回该值。
  • 如果 Optional 对象为空,则返回指定的默认值。
public T orElse(T other)

使用

Optional<String> optional = Optional.ofNullable(someNullableString);

// 如果optional中有值,则返回该值,否则返回 "default"
String result = optional.orElse("default");

3. isPresent

用于检查 Optional 对象中是否存在值。

具体含义如下:

  • 如果 Optional 对象中存在值,则返回 true
  • 如果 Optional 对象为空,则返回 false
public boolean isPresent()

使用

Optional<String> optional = Optional.of("value");

// 如果optional中有值,则返回true,否则返回false
boolean present = optional.isPresent();

4. orElseGet

用于获取 Optional 对象中的值,如果该值不存在(即 Optional 对象为空),则返回由提供的 Supplier 函数生成的默认值。

具体含义如下:

  • 如果 Optional 对象中存在值,则返回该值。
  • 如果 Optional 对象为空,则调用提供的 Supplier 函数生成默认值,并返回该默认值。
public T orElseGet(Supplier<? extends T> other)

使用

Optional<String> optional = Optional.empty();

// 如果optional中有值,则返回该值,否则返回由提供的Supplier函数生成的默认值
String result = optional.orElseGet(() -> "default");

5. ifPersent

用于在 Optional 对象中存在值的情况下执行指定的操作。

具体含义如下:

  • 如果 Optional 对象中存在值,则执行给定的操作。
  • 如果 Optional 对象为空,则不执行任何操作。
public void ifPresent(Consumer<? super T> consumer)

示例用法如下:

Optional<String> optional = Optional.of("value");

// 如果optional中有值,则执行consumer中指定的操作
optional.ifPresent(value -> System.out.println("Value is: " + value));