Optional简化NPE检查

@Data
public class A {
    private B b;
    @Data
    private static class B {
        String name;
    }
}

如果有对象a,想要获取属性b的name,未必避免NPE,则需要如下检查:

        if (a != null) {
            if (a.getB() !=  null) {
                System.out.println(a.getB().getName());
            }
        }

很啰嗦,如果嵌套更多则更繁琐,通过Optional实现则方便很多:

public static void main(String[] args) {
        A a = null;
        System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null)); //  null
        a = new A();
        System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null));//  null
        System.out.println(Optional.ofNullable(a.getB()).map(B::getName).orElse(null));//  null
        B b = new B();
        b.setName("bbb");
        a.setB(b);
        System.out.println(Optional.ofNullable(a).map(A::getB).map(B::getName).orElse(null));//  bbb
    }

你可能感兴趣的:(java,开发语言)