何时使用Optional.orElse()而不是Optional.orElseGet()

Ret*_*iaf 11 java optional java-8

我读过的回答这个问题有关的区别Optional.orElse()Optional.orElseGet().

似乎orElseGet()总是比orElse()懒惰的评估更有效,并且即使在对像这样的非常简单的示例进行基准测试时它也显而易见(参见第4部分):https://www.baeldung.com/java-optional-or-else- VS-或-ELSE-得到

那么,是否有任何使用情况,orElse而不是使用orElseGet

Zha*_*ang 9

  1. 在大多数情况下,您在使用时键入较少orElse,因为它比它短,orElseGet并且比较它们的签名:

orElse(T other)
orElseGet(Supplier<? extends T> other)
Run Code Online (Sandbox Code Playgroud)

a Supplier<? extends T> other很可能比T other.如果性能不是那么重要,您可以选择输入更少.程序员的努力也很重要:-)例如,比较:

orElseGet(() -> 1)
orElse(1)
Run Code Online (Sandbox Code Playgroud)
  1. 正如您的链接所提到的:

默认情况下,每次使用orElseGet()更有意义,除非 已经构造并直接访问默认对象.