Optional 取代 null?

我们在平时编程的时候,遇到的一类Exception 要数 NullPointException, 所以我们很经常为了防止NPE, 会加入防御性的代码,使用验证是否是Null的判断语句,但是这一方面无形中也加大了代码的嵌套,而且这个也不是业务相关性的代码,有时候会加入多层嵌套,导致代码的臃肿,难以维护,影响阅读性,接下来我们就举一个实例来说明一下。

public class OptionalExample {
private static class OptionalTest{
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

public static void main(String[] arg){

    OptionalTest optionalTest = new OptionalTest();

    System.out.println("The name is : " + optionalTest.getName().toUpperCase());


}
}

运行一下,会抛出NPE,因为optionalTest.getName 拿到的是一个Null值,再调用toUpperCase 时候会抛出NPE,那么接下来我们用Optional来进行一下改造。

int number = Optional.ofNullable(two)
            .flatMap(OptionalTestTwo::getCar)
            .map(x -> x.getCarNumber())
            .orElse(12);
    System.out.println(number);

Optional类的引入是为了解决代码中变量值缺失问题,更有效的预防代码中出现的不期而遇的空指针问题,而且能帮助你设计出更好的API,通过阅读方法就知道是否接受一个Optional类型的值。

你可能感兴趣的:(Optional 取代 null?)