【发布时间】:2014-04-11 03:33:36
【问题描述】:
当 Java 8 发布时,我期待它的 Optional 实现与 Guava 的实现基本相同。从用户的角度来看,它们几乎是相同的。但是 Java 8 的 Optional 在内部使用 null 来标记一个空的 Optional,而不是使 Optional 抽象并有两个实现。除了 Java 8 的版本感觉错误(您只是通过隐藏您确实仍在使用它们的事实来避免空值)之外,每次您想要访问它时检查您的引用是否为空不是效率较低,而是而不仅仅是调用一个抽象方法?也许不是,但我想知道他们为什么选择这种方法。
【问题讨论】:
-
我不认为会有太大的性能差异——决定调用哪个方法的运行时成本可能与空检查的成本大致相同。
-
我不明白“感觉不对”的事情。 OOP(尤其是)都是关于隐藏实现的,对吧?如果这些方法通过执行我期望它们执行的操作来满足合同,我不应该担心实现这一目标的幕后操作。
-
我只知道这两个实现的创建者都是一些非常聪明的人,所以我想知道为什么没有达成共识。