1、Optional 介绍
Java 8 引入了一个新的类 java.util.Optional
,它的目的是为了更好地处理空值问题,提供了一种更加安全和优雅的方式来表示可能存在的值。Optional 类设计的初衷是作为返回类型使用,而不是用于非空对象实例的封装。
Optional是在java.util包下的一个用于代替null的一个工具类。
import java.util.Optional;
2实战应用
String a = Optional.ofNullable(Null).orElse("reiwgybv");
System.out.println("a = ",a);
结果为 reiwgybv
因为Optional在判断空时则 直接去后面的值。
暂时项目应用如此,后面再用到则继续补充。
Optional 类的核心特性与方法:
-
创建 Optional 实例:
Optional.of(T value)
:如果传入的value
不为 null,则创建一个包含该值的 Optional 对象,若value
为 null,则抛出NullPointerException
。Optional.ofNullable(T value)
:允许传入可能为 null 的值,如果value
是 null,则创建一个不包含值的 Optional 对象(即空的 Optional)。
-
检查是否包含值:
boolean isPresent()
:判断 Optional 是否包含非空的值。
-
获取值或默认值:
T get()
:如果 Optional 包含值则返回该值,否则抛出NoSuchElementException
。T orElse(T other)
:如果 Optional 包含值则返回该值,否则返回给定的默认值other
。T orElseGet(Supplier<? extends T> other)
:如果 Optional 包含值则返回该值,否则调用 Supplier 函数来生成一个默认值。
-
映射和转换:
<U> Optional<U> map(Function<? super T, ? extends U> mapper)
:如果 Optional 包含值,就对其应用函数mapper
并返回一个新的 Optional,其中包含映射结果;如果没有值,则返回一个空的 Optional。Optional<T> flatMap(Function<? super T, ? extends Optional<? extends T>> mapper)
:类似于 map 方法,但是返回的是另一个 Optional 对象,如果原始 Optional 中的值为空或者映射操作返回了空 Optional,则最终结果是空 Optional。
-
其它方法:
void ifPresent(Consumer<? super T> consumer)
:如果 Optional 包含值,就执行给定的 Consumer 消费者逻辑。Optional<T> filter(Predicate<? super T> predicate)
:如果 Optional 包含值并且该值满足提供的谓词条件,就返回该 Optional,否则返回一个空的 Optional。
通过这些方法,Optional 提供了一种更安全、可读性更好的方式来处理潜在的空值异常,鼓励开发者编写更健壮、更不易出错的代码。同时,它也鼓励程序员思考和设计 API 时,明确表达出某个方法可能不会返回有效结果的情况。