灵感
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()会返回true,get()会返回value
- ofNullable(T value):如果value是null,返回空的Optional对象,否则返回值是value的Optional对象
- orElse():Optional对象没有值的时候,传入一个默认的返回对象,否则返回value
- orElseThrow:Optional对象没有值的时候,传入一个实现了Supplier接口的对象,该对象的get方法返回一个Exception