源码注释
Optional是一个容器对象用于包含一个空值或者是非空值.如果Optional中的值存在,那么isPresent()方法将会返回true,get()方法会返回值.
基于Optional中的值是否为空提供了一些其他的方法:orElse(),在Optional中的值不存在时,会返回一个默认的值.isPresent(),当值存在时执行一个代码块.
当传入的参数不为空时,用于存放参数.如果参数为空,则用于表示值为空.
构造函数
返回一个empty实例,该实例中值不存在.通过该方法避免测试对象为空.
该方法返回一个带有值的Optional对象,使用该方法比使用构造函数使用的次数较多.
关于of()和ofNullable()的区别:ofNullable()用于返回Optional中的静态final实例,而使用of()创建值为空的实例时会报错.
用于获取Optional中的value,如果value不存在的,则抛出NoSuchElementException
用于判断Optional中的value是否为null
如果Optional中的value存在,那么就执行参数中consumer接口的accept()方法
如果value存在,并且value符合传入的参数predicate,则返回该Optional否则返回EMPTY.
该方法接收一个Function参数,当Optional中的值不为空的时候,调用Function.apply()并返回Optional装饰的结果.但value为空时,返回EMPTY.
该方法基本和map()相同,不同之处在于,接收的参数上,flatMap()接收的function需要返回一个Optional对象,而map()值需要返回一个任意的对象
这两个方法都是用于在value为空的时候,返回一个新的对象,对于orElse()的话,它只能返回传入的参数,而对于orElseGet(),它能调用get方法,执行对于的逻辑返回不同新的参数.如下例子:
上面的代码也等同于下面的这段
该方法接收一个返回Exception的参数,当Optional中的值为null时,抛出异常.当value不为null时,返回值.