一、概述
泛型类、java8引进的、java.util包里
二、作用
解决空指针异常带来的不便
三、做法
将对象封装为一个Optional对象,如果封装的对象为空(即该对象不存在),可以使用默认值和或者执行默认操作
四、方法
1、empty() 创建空的Optional对象,对象里面不包含任何值(包括null),不会抛出NullPointerException异常
Optional<String>optional=Optional.empty();
使用Optional变量时,可以使用empty()创建一个空Optional对象对变量作初始化
2、of(T value)创建一个包含指定值的Optional对象
String s=null;
Optional.of(s);
传入非null值不报错,传入null值运行时会抛出NullPointerException异常
3、ofNullable(T value)创建包含指定值的Optional对象,指定值可以是非null值,也可以是null值,值为null是会返回一个空Optional对象(不包含任何值)
String s="abc";
Optional<String>optional=Optional.ofNullable(s);
String s1=null;
Optional<String>optional1=Optional.ofNullable(s1);
4、isPresent()用于判断Optional对象中是否存在非null值,存在返回true,不存在返回false
public static void main(String[] args) {String s="abc";Optional<String>optional=Optional.ofNullable(s);String s1=null;Optional<String>optional1=Optional.ofNullable(s1);if(optional.isPresent()){System.out.println("存在");}else{System.out.println("不存在");}if(optional1.isPresent()){System.out.println("存在");}else{System.out.println("不存在");}}
5、isEmpty()用于判断Optional对象是否为空,为空返回true,不为空返回false
此方法是jdk11中新增的方法
6、get()用来获取包装在Optional对象中的值,Optional对象不能为空,否则在运行时会抛出NoSuchElementException异常
public static void main(String[] args) {String s="abc";Optional<String>optional=Optional.ofNullable(s);String s1=null;Optional<String>optional1=Optional.ofNullable(s1);System.out.println(optional1.get());
}
7、orElse(T other)用于在Optional对象不包含非null值时提供默认值
情况1
public static void main(String[] args) {String s=null;Optional<String>optional=Optional.ofNullable(s);if(!optional.isPresent()){String defaultStr=optional.orElse("cde");System.out.println("optional的默认值是"+defaultStr);}
}
情况2
public static void main(String[] args) {String s=null;Optional<String>optional=Optional.ofNullable(s);if(!optional.isPresent()){String defaultStr=optional.orElse(null);System.out.println("optional的默认值是"+defaultStr);}
}