public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
看出来,get()只能用于不为null的情况下,否则直接抛出NoSuchElementException异常
ifPresent(),如果不为null,则去进行消费
public void ifPresent(Consumer<? super T> consumer) {
if (value != null)
consumer.accept(value);
}
orElseGet(),如果为null,则使用Supplier中供给的值
public T orElseGet(Supplier<? extends T> other) {
return value != null ? value : other.get();
}
orElse(),如果为null,则直接使用传入的值
public T orElse(T other) {
return value != null ? value : other;
}
orElseThrow(),如果为null,则抛出某种异常
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
if (value != null) {
return value;
} else {
throw exceptionSupplier.get();
}
}
除了以上的方法,还有map、flatmap、filter等,这些方法和Stream中的同名方法类似,只不过Optional中的这些方法返回一个Option,而Stream中返回一个Stream。
使用Option来改造你的代码
示例1:输出用户的id
//改造前
if (user!=null){
System.out.println(user.getId());
}