Optional类存在于java.util包下,是一个容器类,可以保存类型T的值,代表这个值存在。是一个可以为null的容器对象,如果值存在则调用isPresent方法后会返回true,调用get方法会返回该对象T,可以避免空指针异常问题。
1.创建Optional类对象
- Optional.of(T t):静态方法创建一个Optional实例,t必须是非空的,否则会报空指针异常。
- Optional.empty():静态方法创建一个空的Optional实例。
- Optional.ofNullable(T t):静态方法创建一个Optional实例,t可以为空,当t为null时,调用empty方法返回一个空的Optional实例。
2.判断Optional容器中是否包含对象
- boolean isEmpty():判断容器中是否不包含对象,如果容器中的值为null返回true,否则返回false。
- boolean isPresent():判断容器中是否包含对象,如果容器中的值不为null返回true,否则返回false。
- void ifPresent(Consumer<? super T> action):如果Optional容器中有值就执行Consumer接口中的实现代码,并且容器中的值会作为Consumer的accpet方法的参数。
//判断integerOptional是否部位null,不为空打印
Integer integer = 15;
Optional<Integer> integerOptional = Optional.ofNullable(integer);
integerOptional.ifPresent(System.out::println);
3.获取Optional容器的对象
- T get():如果Optional对象中包含值(不为null),返回该值,否则抛出空指针异常。
- T orElse(T other):如果Optional对象中包含值(不为null),返回改值,否则返回other对象。
//integer1为空,调用orElse方法返回integer
Integer integer1 = null;
Optional<Integer> integerOptional1 = Optional.ofNullable(integer1);
System.out.println(integerOptional1.orElse(integer)); //15
- T orElseGet(Supplier<? extends T> other):如果Optional对象中包含值(不为null),则返回该值,否则返回由Supplier接口的get方法实现返回的对象。
//如果d为null,则返回一个随机数
Double d = null;
Optional<Double> doubleOptional = Optional.ofNullable(d);
System.out.println(doubleOptional.orElseGet(Math::random));
- Stream stream():若当前Optional为空,则返回空Stream,否则返回包含当前Optional的值的Stream。