可以通过链式调用优雅(简单易读)地避免繁琐的null值判断,避免空指针异常而用指定方式处理,可代替任何类型的值,但需要根据具体情况谨慎选择,因为有时候使用Optional可能会增加代码的复杂度
一般来说,代码逻辑比较复杂,或者方法返回值可能为空,才考虑使用
凭空创建方式:
Optional.of(T t) : 创建一个t类型Optional 实例
Optional.empty() : 创建一个空Optional 实例
Optional.ofNullable(T t): 有T创建含T的O,没T创建空O
boolean Optional.isPresent() : 判断Opt是否有值
Optional.isPresent(Consumer c) 调用者有值返回消费结果,否则摆烂
T get() : 有值则将其返回,否则抛出NoSuchElementException
T Optional.orElse(T t) : 调用者有值,返回该值,否则返回t
T Optional.orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回生产结果
<U>Optional.map(Function<T,U> f): 如果调用者不为空,返回转化后的调用者;否则返回空Opt
使用场景:
存在做的什么
Optional userNameO = Optional.ofNullable("zsl");
userNameO.ifPresent(s -> System.out.println("用户名为" + s));