使用供應商延遲提供預設值

正常 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()