一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。
前言
Java8 中很多的新特性,空指针NPE异常是项目中很常见的问题,用if else 写判空操作代码的可读性很差,Java8中的Optional提供优雅的解决空指针的方案。
Optional类
Optional工具类, 可以看成一个容器,有两种情况1. 有值 2. 要么是null
1. 创建Optional对象
// 1. 创建空的 Optional 实例
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
// 2. 创建 Optional实例
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
// 3. 有值返回 Optional实例,否则返回空的实例
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
常用的Method
1. ifPresent
判断是否包含值。包含值返回 true,不包含值返回 false
public class OptionalTest {
public static void main(String[] args) {
PayOrder payOrder = new PayOrder();
System.out.println(Optional.ofNullable(payOrder.getOrderNo()).isPresent());
payOrder.setOrderNo(12321312L);
System.out.println(Optional.of(payOrder.getOrderNo()).isPresent());
}
}
2. get()
如果Optional有值则将其返回,否则抛出 NoSuchElementException: No value present 异常
3.orElse()
如果调用对象包含值,返回该值,否则返回参数字符串str
4.orElseGet()
如果调用对象包含值,返回该值。否则返回 s 获取的值
5.orElseThrows()
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常
6.map()
如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
7.flatMap()
如果有值,为其执行 mapping 函数返回 Optional 类型返回值,否则返回空Optional。
8.filter()
filter()方法通过传入限定条件对 Optional 实例的值进行过滤。如果有值并且满足 Predicate判断条件,则返回包含该值的Optional,否则返回空 Optional。
9.ifPresent()
如果值存在则使用该值调用consumer,否则不做任何事情
10.ifPresentOrElse()
JDK9以后提供。如果值存在则使用该值调用consume,否则执行自定义的 Runnalbe 操作
11.equals()
判断其他对象是否等于Optional