此类可以说是为了防止空指针而生的类 使用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,并抛出异常
- optional.isPresent()
- 更高级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。
- optional.map(Function<? super T, ? extends U> mapper)