Optional
是一个可能包含也可能不包含空值的容器对象,是一个基于值
的类
- 如果值存在
isPresent()
方法将返回true
get()
方法将返回对应值
Optional
主要是为了避免出现NPE
-NullPointerException空指针异常
在日常开发中,为了避免出现NPE
,我们可能会如示例进行多重非空判断
if(null != classA){
SubClassB subClassB= classA.getSubClassB();
if(null != subClassB){
...
}
}
注意事项
—Optional
未实现Serialable
接口,应尽量避免以下两种情况
- 将
Optional
类型的变量作为方法参数 - 将
Optional
类型的变量作为对象的成员变量
通常只将Optional
作为方法的返回值来规避值为空的情形
- 示例1
public class OptionalTest1 {
public static void main(String[] args) {
Optional<String> optional = Optional.ofNullable(null);
//不为空则输出
optional.ifPresent(item -> System.out.println(item));
System.out.println("++++++");
//为空则输出or else
System.out.println(optional.orElse("or else"));
System.out.println("++++++");
//为空则获取参数中返回的值
System.out.println(optional.orElseGet(() -> "or else get"));
}
}
执行结果
++++++
or else
++++++
or else get
- 示例2
public class OptionalTest2 {
public static void main(String[] args) {
Employee employee1 = new Employee("zhangsan");
Employee employee2 = new Employee("lisi");
List<Employee> employeeList = Arrays.asList(employee1, employee2);
Company company = new Company("company", null);
Optional<Company> optional = Optional.ofNullable(company);
//如果employeeList为空,则返回一个空的list
System.out.println(optional.map(paramCompany ->
paramCompany.getEmployeeList()).orElse(Collections.emptyList()));
}
}
执行结果
[]