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