一、概述
泛型类、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);
}
}