使用供应商延迟提供默认值
在正常 orElse
方法采用 Object
,所以你可能会问,为什么有一个选项,在这里提供一个 Supplier
(该 orElseGet
方法)。
考虑:
String value = "something";
return Optional.ofNullable(value)
.orElse(getValueThatIsHardToCalculate()); // returns "something"
它仍会调用 getValueThatIsHardToCalculate()
,即使它的结果未被使用,因为可选项不为空。
为避免此罚款,你需要供应商:
String value = "something";
return Optional.ofNullable(value)
.orElseGet(() -> getValueThatIsHardToCalculate()); // returns "something"
这样,只有当 Optional
为空时才会调用 getValueThatIsHardToCalculate()
。