【优雅系列】一行代码实现判空

385 阅读1分钟

灵感

NullPointerException ,是不是一看到就头疼捏?为了阻止程序报出这个异常,我们一层又一层地判空,深怕漏了哪个,代码变得冗余臃肿。如果在开发测试中没有发现,到了线上就是灭顶的灾难!那么有没有优雅的判空方式既能让代码清爽又不会遗漏呢?有的!

实现

        /**
         * 臃肿写法
         */
        User fatUser=User.getUser();
        if(fatUser==null)
            fatUser=new User("韩梅梅");
        System.out.println(fatUser.toString());

        /**
         * 优雅写法
         */
 //       User sexUser=Optional.ofNullable(User.getUser()).orElseThrow(new ObjectNotFoundException("找不到用户"));
        User sexUser=Optional.ofNullable(User.getUser()).orElse(new User("韩梅梅"));
        System.out.println(sexUser.toString());

原理

Optional

Optional是Java1.8中引入的,本质是一个对象(value)容器

  • 如果有值,isPresent()会返回trueget()会返回value
  • ofNullable(T value):如果value是null,返回空的Optional对象,否则返回值是value的Optional对象
  • orElse():Optional对象没有值的时候,传入一个默认的返回对象,否则返回value
  • orElseThrow:Optional对象没有值的时候,传入一个实现了Supplier接口的对象,该对象的get方法返回一个Exception

完整代码>> GitHub