java8新特性之Optional --- 解决空指针的问题

Optional 用于简化Java中对空值的判断处理,以防止出现各种空指针异常。 Optional实际上是对一个变量进行封装,它包含有一个属性value,实际上就是这个变量的值。

1 创建
它的构造函数都是private类型的,因此要初始化一个Optional的对象无法通过其构造函数进行创建。它提供了一系列的静态方法用于构建Optional对象:
1.1 empty
用于创建一个空的Optional对象;其value属性为Null。
如:Optional o = Optional.empty();
1.2 of
根据传入的值构建一个Optional对象;
传入的值必须是非空值,否则如果传入的值为空值,则会抛出空指针异常。
使用:o = Optional.of(“test”);
1.3 ofNullable
根据传入值构建一个Optional对象
传入的值可以是空值,如果传入的值是空值,则与empty返回的结果是一样的。
2 方法
3 使用场景
3.1 判断结果不为空后使用
如某个函数可能会返回空值,以往的做法:

String s = test();
if (null != s) {
    
    
    System.out.println(s);
}

现在的写法就可以是:

Optional<String> s = Optional.ofNullable(test());
s.ifPresent(System.out::println);

乍一看代码复杂度上差不多甚至是略有提升;那为什么要这么做呢?
一般情况下,我们在使用某一个函数返回值时,要做的第一步就是去分析这个函数是否会返回空值;如果没有进行分析或者分析的结果出现偏差,导致函数会抛出空值而没有做检测,那么就会相应的抛出空指针异常!
而有了Optional后,在我们不确定时就可以不用去做这个检测了,所有的检测Optional对象都帮忙我们完成,我们要做的就是按上述方式去处理。
3.2 变量为空时提供默认值
如要判断某个变量为空时使用提供的值,然后再针对这个变量做某种运算;
以往做法:

if (null == s) {
    
    
    s = "test";
}
System.out.println(s);

现在的做法:

Optional<String> o = Optional.ofNullable(s);
System.out.println(o.orElse("test"));

3.3 变量为空时抛出异常,否则使用
以往写法:

if (null == s) {
    
    
    throw new Exception("test");
}
System.out.println(s);

现在写法:

Optional<String> o = Optional.ofNullable(s);
System.out.println(o.orElseThrow(()->new Exception("test")));

猜你喜欢

转载自blog.csdn.net/Wangdiankun/article/details/114899433