避免NPE问题的解决方案之一 --- Optional类

    技术2022-07-10  129

    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

    Processed: 0.010, SQL: 9