Optional类
空指针克星!为了解决java中的空指针问题而生!!
Optional 类(java.util.Optional) 是一个容器类,它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且可以避免空指针异常。
Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
-
创建Optional类对象的方法:
Optional.of(T t) : 创建一个 Optional 实例,t必须非空public void test() {
Date date = new Date();
date = null;
Optional date1 = Optional.of(date);//出现空指针异常
}
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t):t可以为null
public void test() {
Date date=new Date();
date=null;
Optional<Date> date1 = Optional.of(date);//出现空指针异常
Optional<Date> date2 = Optional.ofNullable(date);//正常运行内部生成一个空的Optional对象
}
-
判断Optional容器中是否包含对象:
boolean isPresent() : 判断是否包含对象public void test() {
Date date = new Date();
date = null;
Optional date1 = Optional.ofNullable(date);
boolean present = date1.isPresent();
System.out.println(present);//false
}
void ifPresent(Consumer<? super T> consumer) :如果有值,就执行Consumer接口的实现代码,并且该值会作为参数传给它。
3. 获取Optional容器的对象:
T get(): 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other) :如果有值则将其返回,否则返回指定的other对象。
public void test() {
Date date = new Date();
date = null;
Optional<Date> date1 = Optional.ofNullable(date);
Date date2 = date1.orElse(new Date());
System.out.println(date2);//输出Mon Jul 22 20:04:59 CST 2019
}
T orElseGet(Supplier<? extends T> other) :如果有值则将其返回,否则返回由Supplier接口实现提供的对象。
public void test() {
Date date = new Date();
date = null;
Optional<Date> date1 = Optional.ofNullable(date);
Date date2 = date1.orElseGet(() -> new Date());
System.out.println(date2);//输出Mon Jul 22 20:06:59 CST 2019
}
T orElseThrow(Supplier<? extends X> exceptionSupplier) :如果有值则将其返
回,否则抛出由Supplier接口实现提供的异常。
public void test() {
Date date = new Date();
date = null;
Optional<Date> date1 = Optional.ofNullable(date);
Date date2 = date1.orElseThrow(() -> new RuntimeException("对象为空!"));
System.out.println(date2);
}