🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### Optional 一个容器类,代表一个值存在或者不存在。用来避免空指针的异常。 java8对Optional的描述这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象 ### Optional 的三种构造方式: #### 1. Optional.of(obj) of方法通过工厂方法创建Optional类。需要注意的是,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException。 #### 2. Optional.ofNullable(obj) 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。(ofNullable与of方法相似,唯一的区别是可以接受参数为null的情况.) **源码** ```java传 null 进到就得到 Optional.empty(), 非 null 就调用 Optional.of(obj). public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } ``` #### 3. Optional.empty() 创建一个空的Optional ### 其他的方法 #### 1.get 如果Optional有值则将其返回,否则抛出NoSuchElementException。 ```java //执行下面的代码会输出:No value present try { //在空的Optional实例上调用get(),抛出NoSuchElementException System.out.println(empty.get()); } catch (NoSuchElementException ex) { System.out.println(ex.getMessage()); } ``` #### 2.ifPresent 如果Optional实例是否有值 有=true 无=false #### 3.orElse 如果Optional实例有值则将其返回,否则返回orElse方法传入的参数。 #### 4.orElseGet orElseGet方法可以接受Supplier接口的实现用来生成默认值。 empty.orElseGet(() -> "Default Value") #### 5.orElseThrow 如果有值则将其返回,否则抛出supplier接口创建的异常。 ```java try { empty.orElseThrow(ValueAbsentException::new); } catch (Throwable ex) { //输出: No value present in the Optional instance System.out.println(ex.getMessage()); } ``` #### 6.map 如果有值,则对其执行调用map函数得到返回值。如果返回值不为null,则创建包含map返回值的Optional作为map方法返回值,否则返回空Optional。 return user.map(u -> u.getOrders()).orElse(Collections.emptyList()) #### 7.flatMap 与Map类似,但要求返回的必须是Optional。 optional.flatMap(t->Optional.of(t.length())); * * * * * 使用方式:可能又有可能没有的值包装到Optional里面即可。 private Optional<Man> man = Optional.empty();