Optional

Posted by 汤键|兔子队列 on November 18, 2021 禁止转载
本文总共 1134 字 · 阅读全文大约需要 4 分钟

简介

  • 在开发过程中,经常会碰到空指针异常,如:
  • 所以在平时编码中,我们会经常判断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对象