gpt4 book ai didi

java - Guava 的 Optional 类有什么意义

转载 作者:IT老高 更新时间:2023-10-28 11:36:39 26 4
gpt4 key购买 nike

我最近读到了这个并且看到有人在使用这个类,但在几乎所有情况下,使用 null 会同样有效——如果不是更直观的话。有人可以提供一个具体的例子,其中 Optional 可以实现 null 无法或以更简洁的方式实现的目标吗?我唯一能想到的是将它与不接受 null 键的 Maps 一起使用,但即使这样也可以通过 null 值的侧面“映射”来完成.谁能给我一个更有说服力的论据?

最佳答案

Guava 团队成员在这里。

null 的一个最大缺点可能是它在任何给定上下文中的含义并不明显:它没有说明性的名称。 null 表示“此参数没有值”并不总是很明显 - 哎呀,作为返回值,有时它表示“错误”,甚至是“成功”(!!),或者只是“正确的答案是什么都没有”。 Optional 通常是您在使变量可为空时实际表示的概念,但并非总是如此。如果不是,我们建议您编写自己的类,类似于 Optional 但使用不同的命名方案,以明确您的实际意思。

但我想说 Optional 的最大优势不在于可读性:优势在于它的白痴性。如果您希望程序完全编译,它会迫使您积极考虑缺席的情况,因为您必须主动解开 Optional 并解决这种情况。 Null 使简单地忘记事情变得非常容易,虽然 FindBugs 有帮助,但我认为它几乎不能解决这个问题。当您返回可能存在或不存在的值时,这一点尤其重要。您(和其他人)更容易忘记 other.method(a, b) 可能返回 null 值,而不是您可能忘记 当您实现 other.method 时,a 可能是 null。返回 Optional 使得调用者不可能忘记这种情况,因为他们必须自己解开对象。

出于这些原因,我们建议您使用 Optional 作为方法的返回类型,但不一定在方法参数中。

(顺便说一句,这完全是从讨论 here 中抄袭而来的。)

关于java - Guava 的 Optional 类有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9561295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com