最佳答案
我试图理解Optional<T>.orElse()
和Optional<T>.orElseGet()
方法之间的区别。
orElse()
方法的描述是如果存在则返回值,否则返回other。
而orElseGet()
方法的描述是如果存在则返回值,否则调用other并返回该调用的结果。
orElseGet()
方法接受一个Supplier函数接口,该接口本质上不接受任何参数并返回T
。
在哪种情况下需要使用orElseGet()
?如果你有一个方法T myDefault()
,为什么不直接使用optional.orElse(myDefault())
而不是optional.orElseGet(() -> myDefault())
呢?
orElseGet()
似乎并没有将lambda表达式的执行推迟到以后的某个时间之类的,那么它的意义是什么呢?(我认为如果它返回一个更安全的Optional<T>
,其get()
永远不会抛出NoSuchElementException
,而isPresent()
总是返回true,那么它会更有用……但显然不是,它只是像orElse()
一样返回T
)。
还有其他的不同吗?