Optional类旨在解决NullPointException问题。 Java 8 doc
1. 创建空Optional类
Optional<Staff> empty = Optional.empty();
2. 简单应用
2.1 准备的类
public class Staff {
String name;
Integer age;
Department department;
public Staff(){
}
public Staff(String name, Integer age){
this.name = name;
this.age = age;
}
... //getter setter
}
public class Department {
String name;
public Department(){
}
public Department(String name){
this.name=name;
}
... //getter setter
}
2.2 取默认值、单级判断
@Test
void optionalTest(){
System.out.println("--------------------------Default Value-----------------------");
Staff staff = null;
Staff staffOptional = Optional.ofNullable(staff).orElse(new Staff("Jerome",12));
System.out.println(staffOptional);
System.out.println("------------------------Single Level-------------------------");
String staffName = Optional.ofNullable(staff).map(s -> s.getName()).orElseGet(() -> "Anonymity");
System.out.println(staffName);
}
显示结果
--------------------------Default Value-----------------------
*$Staff@61dd025
------------------------Single Level-------------------------
Anonymity
2.3 多级判断
@Test
void optionalTest(){
System.out.println("--------------------------Default Value-----------------------");
Staff staff = null;
Staff staffOptional = Optional.ofNullable(staff).orElse(new Staff("Jerome",12));
System.out.println(staffOptional);
System.out.println("-------------------------Multi Level------------------------");
Department department = new Department("IT");
staffOptional.setDepartment(department);
staffName = Optional.ofNullable(staffOptional).map(s -> s.getDepartment()).map(d-> d.getName()).orElse("Anonymity");
System.out.println(staffName);
}
显示结果
--------------------------Default Value-----------------------
com.sevnight.zeus.myths.ZeusMythsApplicationTests$Staff@61dd025
-------------------------Multi Level------------------------
IT