Java Optional类的使用
Java Optional
类是 Java 8 引入的一种容器类,用于处理可能为 null 的值,旨在减少空指针异常(NullPointerException)的可能性。它主要用于表示一个可能存在或不存在的值。使用 Optional
可以使代码更具可读性和意图性。以下是一些 Optional
类的常用用法示例:
创建 Optional 对象
使用
of
方法:String value = "Hello";
Optional<String> optionalValue = Optional.of(value);
注意:如果传入的值为 null,会抛出
NullPointerException
。使用
ofNullable
方法:String value = null;
Optional<String> optionalValue = Optional.ofNullable(value);
这种方法允许传入 null,结果为空的
Optional
对象。使用
empty
方法:Optional<String> emptyOptional = Optional.empty();
创建一个空的
Optional
。
检查值是否存在
使用
isPresent
方法:if (optionalValue.isPresent()) {
System.out.println("Value exists: " + optionalValue.get());
}
检查值是否存在。
使用
ifPresent
方法:optionalValue.ifPresent(System.out::println);
如果值存在,执行指定的操作。
提取值
使用
get
方法:String value = optionalValue.get();
直接获取值,前提是值必须存在,否则会抛出异常。
使用
orElse
方法:String value = optionalValue.orElse("Default Value");
如果值存在,返回值;如果不存在,返回默认值。
使用
orElseGet
方法:String value = optionalValue.orElseGet(() -> "Default Value From Supplier");
类似于
orElse
,但接受一个供给函数(Supplier
)。使用
orElseThrow
方法:String value = optionalValue.orElseThrow(() -> new RuntimeException("Value not present"));
如果值不存在,抛出指定的异常。
过滤和转换
使用
filter
方法:Optional<String> filteredValue = optionalValue.filter(v -> v.startsWith("H"));
根据条件过滤值。
使用
map
方法:Optional<Integer> length = optionalValue.map(String::length);
如果值存在,应用函数并返回一个新的
Optional
。使用
flatMap
方法:Optional<Integer> flatMappedValue = optionalValue.flatMap(v -> Optional.of(v.length()));
用于将
Optional
的返回值展开。
Optional
类提供了一个更加优雅和安全的方式来处理可能为空的引用,减少了空指针异常的出现几率,并鼓励开发者显式处理空值的情况。