Optional工具类详解
前言
Java8引入optional工具类的目的主要是为了解决日常开发过程中经常遇到的空指针异常,它具备一整套的空指针判断方法,包括变量、对象、集合、数组等,当然你也可以写工具类取判定,但为了代码的整洁美观更少的写if(null){}类似代码,并且现在流行的链式编程我们还是有必要学习下该工具类的使用。。。
一、Optional 方法有哪些?
所以方法如下:
如何构造?
Optional 的三种构造方式:Optional.of(T), Optional.ofNullable(T) 和Optional.empty()
- Optional.of(T) 它要求传入的 T 不能是 null 值的, 否则直接报空指针异常。
- Optional.ofNullable(obj):它是相对宽容的方式来构造一个 Optional 实例。,传 null 进到就得到 Optional.empty(),非 null 就调用Optional.of(obj)。
- Optional.empty():返回一个空的 Optional 对象。
具体方法
🤣 of:为非null的值创建一个Optional。of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException。因此不经常用。
😎 ofNullable:为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
😂 isPresent:如果值存在返回true,否则返回false。
😊 ifPresent:如果Optional实例有值则为其调用consumer,否则不做处理
😎 get:如果Optional有值则将其返回,否则抛出NoSuchElementException。因此也不经常用。
😁 orElse:如果有值则将其返回,否则返回指定的其它值。
😊 orElseGet:orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值
😘 orElseThrow:如果有值则将其返回,否则抛出supplier接口创建的异常。
😒 filter:如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
map:如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
❤ flatMap:如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。
二、如何使用
一般不用Optional方法在判空时代码如下:
public String getUseAddress(User user){
if(user == null){
return "未获取到用户地址";
}else return user.getAddress();
}
当我们使用Optional来进行判空时可以直接选择链式编程的方式:
User user = null;
String value = Optional.ofNullable(user).map(u -> u.getAddress()).orElse("未知");
System.out.println(value);