使用供應商延遲提供預設值
在正常 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()
。