此类可以说是为了防止空指针而生的类 使用Optional尽力避免直接调用 Optional.get(), Optional.of() 方法,应依赖于其他像 Optional.ofNullable(), Optional.orElse(), Optional.orElseGet(), Optional.map() 等这样的方法

常用方法

  • Optional.of(T value)
    • 返回一个Optional对象,value不能为空,否则会出空指针异常Optional.ofNullable(T value), 返回一个Optional对象
  • Optional.empty()
    • 代表空
  • Optional.ofNullable(_T value)_
    • 返回一个Optional对象,value可以为空,为空返回null,不为空返回一个Optional对象
  • 其他API:
    • optional.isPresent()
      • 是否存在值(不为空)
    • optional.ifPresent(Consumer<? super T> consumer),
      • 如果存在值则执行consumer
    • optional.get()
      • 获取value
    • optional.orElse(T other)
      • 如果没值则返回other
    • optional.orElseGet(Supplier<? extends T> other)
      • 如果没值则执行other并返回
    • optional.orElseThrow(Supplier<? extends X> exceptionSupplier)
      • 如果没值则执行exceptionSupplier,并抛出异常
  • 更高级APL:
    • optional.map(Function<? super T, ? extends U> mapper)
      • 映射,映射规则由function指定,返回映射值的Optional,所以可以继续使用Optional的API。
    • optional.flatMap(Function<? super T, Optional< U > > mapper)
      • ,同map类似,区别在于map中获取的返回值自动被Optional包装,flatMap中返回值保持不变,但入参必须是Optional类型
    • optional.filter(Predicate<? super T> predicate)
      • 过滤,按predicate指定的规则进行过滤,不符合规则则返回empty,也可以继续使用Optional的API。