简介
空指针异常是Java应用程序失败的最常见原因。Google公司在著名的Guava项目中引入了Optional类,通过使用检查空值的方式来防止代码污染,来解决臭名昭著的空指针异常问题。受此启发,Optional类已成为Java 8 类库的一部分。
使用
Optional类可以看做是一个容器,提供很多有用的方法处理空值的问题,这样使用者就可以不显式进行控制检测,使得代码更干净。
1. 创建Optional对象方法
Optional.of(T t)
:创建一个Optional实例,t必须非空
Optional.empty()
:创建一个空的Optional实例
Optional.ofNullable(T t)
:t可以为null
2. 判断Optional容器中是否包含对象
boolean isPresent()
:判断是否包含对象
void ifPresent(Consumer<? super T> consumer)
:如果有值,则执行Consumer接口的实现代码,存在的值会作为Consumer的参数
boolean isEmpty()
:判断value是否为空(JDK 11新增)
3.获取Optional对象
T get()
:如果调用对象包含值,返回该值,否则抛出异常
T orElse(T other)
:如果有值则将其返回,否则返回指定的Other对象
T orElseGet(Supplier<? extends T> other)
:如果有值则将其返回,否则返回Supplier接口实现提供的对象
T orElseThrow(Supplier<? extends X> exceptionSupplier)
:如果有值则将其返回,否则抛出由Supplier接口实现提供的异常
isPresentOrElse(Consumer <? super T> action,Runnable emptyAction)
:值非空,则执行参数1功能,否则执行参数2功能(JDK 9 新增)
Optional<T> or(Supplier <? extends Optional<? extends T> supplier >
:值非空,返回对应的Optional;否则返回形参封装的Optional(JDK 9 新增)
Stream<T> stream()
:值非空,返回仅包含此值的Stream;否则返回一个空的Stream(JDK 9 新增)
T orElseThrow()
:值非空,返回值;否则抛出NoSuchElementException异常(JDK 10 新增)