Java 中的 Optional 类 orElseThrow() 方法2025年1月7日 | 阅读 4 分钟 Java 的 Optional 类是一个显式的容器对象,它包含一个可能存在也可能不存在的非空值。它最初在 Java 8 中使用,以一种更强大、更安全的方式来处理可能为 null 的值。 在 Optional 类所有的方法中,我们可以重点关注 orElseThrow()。这个方法要么返回 Optional 中包含的值,要么在值缺失时抛出异常。 它提供了一种直接的方式来处理我们可能需要某个值,但该值可能不存在的情况;同时,它不会让我们遇到空指针异常。 目的和用法Optional 类及其 orElseThrow() 方法主要有两个用途:为处理可选值提供更函数式的方法。Optional 在使用对象前进行空值检查的常见做法上更胜一筹,因为它在资源使用方面基于更声明式的方法。 当问题用“无”来解决时,许多与空引用相关的错误都会被消除,因为值的缺失得到了明确的处理。 文件名:OptionalOrelsethrow.java 输出 ERROR! Exception in thread "main" java.lang.IllegalArgumentException: Value is absent at Main.lambda$main$0(Main.java:8) at java.base/java.util.Optional.orElseThrow(Optional.java:408) at Main.main(Main.java:8) 解释 在此示例中,getValue() 方法用于演示返回的值可能为 null 的情况。它可以描绘一种场景,例如数据源是数据库或其他在线应用程序,其中函数的输出不是预先确定的。 创建 Optional: Optional.ofNullable(getValue()) 返回一个 java.util.Optional,其中包含 getValue() 方法的结果。如果结果为 null,则 Optional 为空。 使用 orElseThrow() 处理缺失: orElseThrow() 方法用于从 Optional 中提取值,或者在值不存在时抛出异常。 该方法接收一个 Supplier 函数式接口,该接口包含要抛出的异常。在这里,如果 Optional 为空,则会创建一个类型为 java.util.InvalidException 的异常,消息为“值不存在”。 输出: 如果 getValue() 不等于 null,则打印该值。如果 getValue() 返回 null,则抛出 IllegalArgumentException 以指示缺少必需的值。 显式空值处理: 与不使用 Optional 和 orElseThrow() 相比,这使得代码更加清晰易读。它确保了一个方法可以产生一个“缺失”的形式,并确保这种情况必须被处理。 降低 NullPointerException 的风险: 在 Optional 中,JVM 向开发者保证某个值可能不可用,从而最大限度地减少了 NullPointerException 的数量。 更简洁的代码: 这是一个优势,因为 Optional 可以通过消除对多个空值检查的需求来使代码稍微更简洁。 函数式风格: Optional 使用 map()、flatMap()、filter() 等许多函数来初始化和处理函数式编程,前提是包含的值存在。 注意事项虽然 Optional 提供了许多好处,但并非没有需要考虑的地方:虽然 Optional 提供了许多好处,但并非没有需要考虑的地方 性能: 过度使用 Optional 可能导致创建可能不会被使用的对象,从而增加开销。通常建议在声明返回类型而不是字段或方法参数时使用。 异常处理: 使用 orElseThrow() 占位符时,开发者应选择适当的异常和信息丰富的错误消息。 不能取代 null: Optional 不是要在所有情况下取代 null 的使用。它是一种实用工具,仅适用于值可能缺失且需要频繁进行空值检查的情况。 结论Optional orElseThrow() 也是一个基于 Java 的方法,它倾向于处理 Java 中可能缺失的值。因为它通过表明一个值“应该”存在来帮助编写更可靠、有良好文档和可扩展的代码。但在缺失的情况下,它提供了一种有效处理这种情况的技术。另一方面,像任何工具一样,必须恰当使用它,以免将代码的抽象性变成形式主义的奖杯。 下一个主题Java-precondition |
Java 是面向对象编程领域中最受欢迎且经常使用的语言之一。在过去的几年里,Java 凭借其强大而灵活的功能,一直是软件开发的主流。在 Java 中,继承和接口是两个基本概念...
阅读 4 分钟
Java 的“最小跳数到达终点”问题旨在确定从数组的第一个元素跳到最后一个元素所需的最小跳数,前提是每个元素表示可以向前跳的最大步数...
5 分钟阅读
Java 未打开是一个可能由于某些原因出现的错误或故障排除。但我们可以记住一些要点,这样在安装 Java 和打开它时,我们可能不会遇到这些问题。在本节中,我们将...
阅读 4 分钟
Java 中的 GP(等比数列)问题数量涉及确定给定数字集中有效等比数列的数量。等比数列由公比定义,在各个领域都很重要。在本教程中,我们将找到 GP 数列的数量……
阅读 10 分钟
Java vs JavaScript Java 是一种面向对象的通用编程语言(尽管它不完全是面向对象的,因为它包含原始类型)。Java 代码是平台无关的,这意味着 Java 代码可以在任何支持 Java 的平台上运行。代码无需重新编译。Java...
阅读 3 分钟
Java 中的 Prim 算法是最小生成树最常用的算法之一。Prim 算法从一个不包含顶点的生成树开始。在 Prim 算法中,我们维护两个顶点集,第一个包含位于 MSP 中的顶点……
阅读 6 分钟
在设计表单时,电子邮件起着重要作用。电子邮件可以是我们的用户名或登录 ID。电子邮件有其自身的结构,在使用之前,我们需要对其进行验证。在 Java 中,电子邮件验证是通过使用正则表达式来执行的。电子邮件验证是...
阅读 3 分钟
是访问修饰符。它可以分配给变量、方法和内部类。它是限制性最强的访问修饰符。需要记住的点:私有访问修饰符只能在同一个类中访问。我们不能将 private 分配给外部类和接口。...
阅读 3 分钟
XOR按位运算符,用符号“^”表示,是Java中的二元运算符,它在两个操作数之间执行按位XOR运算。XOR运算返回一个值,其中结果中的每个位仅当精确地...
阅读 3 分钟
在本节中,我们将学习如何使用 while 循环、for 循环和递归在 Java 中反转数字。要反转数字,请按照以下步骤操作:首先,我们使用模(%)运算符找到给定数字的余数。将变量 reverse 乘以...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India