如果 Optional 为空,则返回默认值
不要只使用 Optional.get()
, 因为那可能会抛出 NoSuchElementException
。该 Optional.orElse(T)
和 Optional.orElseGet(Supplier<? extends T>)
方法提供一种方法来提供一个默认值的情况下,可选的是空的。
String value = "something";
return Optional.ofNullable(value).orElse("defaultValue");
// returns "something"
return Optional.ofNullable(value).orElseGet(() -> getDefaultValue());
// returns "something" (never calls the getDefaultValue() method)
String value = null;
return Optional.ofNullable(value).orElse("defaultValue");
// returns "defaultValue"
return Optional.ofNullable(value).orElseGet(() -> getDefaultValue());
// calls getDefaultValue() and returns its results
orElse
和 orElseGet
之间的关键区别在于后者仅在 Optional 为空时进行评估,而即使 Optional 不为空,也会评估提供给前者的参数。因此,orElse
应仅用于常量,而不应基于任何类型的计算提供值。