Optional类
...大约 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));