一 . 概述
在我们之前的应用之中,我们常常需要面临的一个问题就是面对各种出现null的情况.
比如我们的方法的参数是否为null,我们的方法的返回值是否是null.
我们常见的一种情景就是忘记掉这些特殊的情况,这会导致我们的应用在特殊的情况下挂掉.
JDK吸取了guava之中的傻瓜式防护的策略,让程序员必须对null进行处理,这样的好处就是程序员在代码的上下文之中常常被提醒需要对null进行处理,这样就能更好的避免掉null引起的问题.
二 . Optional类
我们首先看看我们如何创建一个Optional对象.
@Test public void test1() { //创建Optional对象 // 使用of方法创建一个Optional对象 Optional<String> op = Optional.of("trek"); // 如果我们使用null 创建一个对象,那么立马就会得到一个空指针异常 //op = Optional.<String>of(null); //我们更为常见的做法就是:这样我们直接就能获取到一个null的Optional对象 op = Optional.empty(); //当我们也无法确定是否为null的时候,我们可以按照下面的API创建Optional对象 op = Optional.<String>ofNullable(null); }
当我们学完上面的API之后,如果我们需要创建自己的API模块的时候,我们可以将方法的返回值变成Optional类型,这样使用者在使用的时候,就自动提示可能需要对null进行一定的处理,
在这样的傻瓜式防护的原则下面,我们就能尽可能的减少空指针的出现.
三 .从Optional之中获取值
@Test public void test2() { //正常的情况下 Optional<String> op = Optional.of("trek"); String str = op.get(); System.out.println(str); //如果含有null op = Optional.ofNullable(null); String str1 = op.get(); // 此时就会直接抛出一个异常 System.out.println(str1); }
@Test public void test3() { Optional<String> op = Optional.of("trek"); op.ifPresent(System.out::println); op = Optional.ofNullable(null); op.ifPresent(System.out::println); }
我们可以使用ifPresent()方法让用户显示的操作Optional对象,这样用户就会知道,我只会在非null的情况下使用这个代码块,而不是完成无脑的使用造成null指针异常.