`Optional.orElse()` 和 `Optional.orElseGet()` 之间的区别
我试图了解Optional<T>.orElse()
和Optional<T>.orElseGet()
方法之间的区别。
该orElse()
方法的描述是 “如果存在则返回值,否则返回其他值”。
同时,该orElseGet()
方法的描述是 “如果存在则返回值,否则调用其他值并返回该调用的结果。”
该orElseGet()
方法采用 Supplier 功能接口,该接口本质上不带任何参数并返回T
。
在什么情况下需要使用orElseGet()
?如果你有一个方法T
myDefault()
,你为什么不直接做optional.orElse(myDefault())
而不是optional.orElseGet(()
-> myDefault())
?
似乎并没有orElseGet()
将 lambda
表达式的执行推迟到以后的某个时间或什么的,那么它有什么意义呢?(我原以为如果它返回一个更安全Optional<T>
的,它get()
从不抛出
aNoSuchElementException
并且isPresent()
总是返回 true
会更有用......但显然它不是,它只是像返回T
一样orElse()
)。
我还缺少其他一些区别吗?