简介
- 在开发过程中,经常会碰到空指针异常,如:
- 所以在平时编码中,我们会经常判断null
- 但是过多嵌套 if 语句会降低代码整体可读性,提高复杂度
- 此时,可以通过Optional使代码变的更简洁
- java.util.Optional类是Java8为了解决null值判断问题
- 借鉴Google guava类库的Optional类而引入的一个同名Optional类
Optional.ofNullable(e)避免了空指针
- 1.首先执行ofNullable()方法,如果T对象为空,则执行empty()方法;不为空,则执行of(value)方法
- 2.empty()方法,初始化一个空对象Optional(空对象和null不是一回事)
- 3.of(value)方法,将泛型对象T用于Optional构造方法的参数上,返回一个有值的对象
- 4.经过上面两步,从而保证了Optional不为null,避免了空指针
常用方法-Optional.ofNullable(e).ifPresent()
- ifPresent()方法用于判断value是否存在
- 不为NULL则返回true,如果为NULL则返回false
- 当传入的对象不为空(e!=null)时,才会执行ifPresent()中的代码,e=null时什么都不会执行,也不会抛异常
常用方法-Optional.ofNullable(e).ifPresent(Consumer< ? super T> consumer)
- ifPresent()方法接受一个Consumer对象(消费函数)
- 如果包装对象的值非空,则运行Consumer对象的accept()方法
常用方法-Optional.ofNullable(e).orElse()
- 如果包装对象值非空,返回包装对象值,否则返回orElse方法传入的参数
- 此方法可以替代三目运算符使用
常用方法-Optional.ofNullable(e).orElseGet()
- orElseGet()方法与orElse()方法类似
- 区别在于:
- orElse是返回一个替代值,例如输入null,返回一个new ArrayList()
- orElseGet是可以传入一个supplier接口的lambda表达式,来实现不同的逻辑
常用方法-Optional.ofNullable(e).orElseThrow
- orElseThrow在输入是null时,会返回一个异常对象,会自动throw这个异常对象
常用方法-Optional.ofNullable(e).filter()
- filter()方法接受参数为Predicate对象,用于对Optional对象进行过滤
- 如果符合Predicate的条件,返回Optional对象本身,否则返回一个空的Optional对象