Optional 类是 Java 8 引入的一个容器类,用于表示一个值存在或不存在的情况。它的设计目的是为了解决空指针异常(NullPointerException)问题,并提供更好的代码可读性和安全性。
创建 Optional 实例
可以使用以下方法来创建 Optional 实例:
Optional.of(value)
: 创建一个包含指定值的 Optional 实例。如果值为 null,则抛出 NullPointerException。
Optional<String> optionalValue = Optional.of("Hello");
Optional.empty()
: 创建一个空的 Optional 实例。
Optional<String> emptyOptional = Optional.empty();
Optional.ofNullable(value)
: 创建一个包含指定值的 Optional 实例。如果值为 null,则创建一个空的 Optional 实例。
Optional<String> nullableOptional = Optional.ofNullable(null);
判断和获取 Optional 的值
可以使用以下方法来判断和获取 Optional 中的值:
isPresent()
: 判断 Optional 是否包含值。
if (optionalValue.isPresent()) {
// Optional 包含值的逻辑
}
get()
: 获取 Optional 中的值。注意在调用前先判断 Optional 是否包含值。
String value = optionalValue.get();
获取 Optional 的值或默认值
可以使用以下方法来获取 Optional 中的值或默认值:
orElse(defaultValue)
: 获取 Optional 中的值,如果不存在值,则返回指定的默认值。
String valueOrDefault = nullableOptional.orElse("Default Value");
orElseGet(supplier)
: 获取 Optional 中的值,如果不存在值,则通过 Supplier 函数提供一个默认值。
String valueOrDefault = nullableOptional.orElseGet(() -> generateDefaultValue());
orElseThrow(exceptionSupplier)
: 获取 Optional 中的值,如果不存在值,则抛出指定的异常。
String value = optionalValue.orElseThrow(() -> new RuntimeException("Value not found"));
使用 Optional 的其他操作
Optional 类还提供了一些其他操作,例如:
map(mapper)
: 对 Optional 中的值进行映射转换。
Optional<String> mappedValue = optionalValue.map(str -> str.toUpperCase());
filter(predicate)
: 根据指定条件过滤 Optional 中的值。
Optional<String> filteredValue = optionalValue.filter(str -> str.length() > 5);
flatMap(mapper)
: 对 Optional 中的值进行映射转换,并将结果打平。
Optional<String> flatMappedValue = optionalValue.flatMap(str -> Optional.ofNullable(str.toUpperCase()));
以上是 Optional 类的基本用法和常用操作,通过合理运用 Optional 类,可以提升代码的可读性和健壮性,减少空指针异常的发生。