我已阅读此 question 的答案关于 Optional.orElse()
和 Optional.orElseGet()
的区别。
似乎 orElseGet()
总是比 orElse()
更有效,因为惰性评估,即使在对非常简单的示例进行基准测试时也明显可见(参见第 4 部分):https://www.baeldung.com/java-optional-or-else-vs-or-else-get
那么,是否存在使用 orElse
而不是 orElseGet
更好的用例?
- 在大多数情况下,您在使用
orElse
时输入较少, 因为它比 orElseGet
短并且,比较他们的签名:
orElse(T other)
orElseGet(Supplier<? extends T> other)
一个Supplier<? extends T> other
很可能长于 T other
.如果性能不是那么重要,您可以选择少打字。程序员的努力也很重要:-) 例如,比较:
orElseGet(() -> 1)
orElse(1)
- 正如您的链接所提到的:
by default, it makes more sense to use orElseGet() every time unless
the default object is already constructed and accessible directly.