首页  >  文章  >  Java  >  何时使用“Optional.orElseGet()”而不是“Optional.orElse()”?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 00:32:03153浏览

 When to Use `Optional.orElseGet()` Over `Optional.orElse()`?

Optional.orElse()和Optional.orElseGet()之间的区别

Java中的Optional类提供了方便的方法来处理和返回可能或可能不是的值展示。此类中的两个重要方法是 orElse() 和 orElseGet()。这些方法之间的主要区别在于调用后备值或计算的时间。

orElse()

orElse() 方法采用默认值作为参数并返回该值如果可选实例为空,则返回值。它不会等待 isPresent() 被求值,而是立即求值并返回提供的后备值,即使Optional实例不为空也是如此。

orElseGet()

相反, orElseGet() 方法将Supplier 接口作为参数,允许您定义仅在Optional 实例为空时运行的计算。当后备值的计算成本较高且仅应在必要时执行时,此方法会更有效。

何时使用 orElseGet() 而非 orElse()

考虑使用 orElseGet() 而不是orElse() 在以下场景中:

  • 性能优化:orElseGet() 确保仅在需要时执行回退计算,如果回退计算占用资源,则可以提高性能.
  • 异常处理:如果回退计算可能抛出异常,orElseGet() 允许您以更受控的方式包装它,避免抛出任何意外的异常。
  • 代码可读性:将 orElseGet() 与描述性供应商一起使用可以通过指示何时执行回退计算来提高代码可读性。

示例用法

考虑以下示例:

<code class="java">Optional<String> optional = Optional.ofNullable("Hello");

// Always computes the fallback value.
String result1 = optional.orElse("World");

// Computes the fallback value only if the optional is empty.
String result2 = optional.orElseGet(() -> {
   // Expensive computation here
   return "World";
});</code>

在此示例中,result1 将始终包含“World”,因为无论是否存在选项,都会评估后备值。另一方面,如果可选项为空,则 result2 仅会被分配“World”,从而在计算成本较高时获得更好的性能。

以上是何时使用“Optional.orElseGet()”而不是“Optional.orElse()”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn