Optional
主要解决NPE问题,包装类
构造方法
- Optional类的构造方法时私有的,通常情况下通过一下方法构建
- Optional.empty(); 返回一个空的Optinal实例
- Optional.of(T t); 不能传null否则报NPE
- Optional.ofNullable(T t); 任意值
主要方法
- get()
直接调用get()
取值,如果对象null
还是报NPE - isPresent()
如果对象为null
,返回结果为false,反之结果为true; - ifPresent(Consumer<? super T> consumer)
参数为consumer
函数接口 ,如果对象为null
则不会调用accept`()
,反之则会调用。 - orElse(T t)
如果对象为null
则会返回t
,如果不为null
返回原本结果。 - orElseGet(Supplier<? extends T> supplier)
参数为Supplier对象,其实和上面的**orElse(T t)**查不多,如果对象为null
则会返回get()
执行的结果,如果不为null
返回原本结果。
唯一区别在于 orElse(T t) 不管对象为不为null
都会生成t
对象,而 **orElseGet(Supplier<? extends T> supplier)**只在对象为null
时才会调用后面的get()
方法
orElseGet(Supplier<? extends T> supplier) 相比 orElse(T t) 性能更高 - orElseThrow(Supplier<? extends X> exceptionSupplier)
其实和上面的 orElseGet(Supplier<? extends T> supplier)`查不多,如果对象为null
则会抛出get()
的异常,如果不为null
返回原本结果。