为什么java.util.Optional没有Some和None子类?

时间:2015-07-29 10:27:14

标签: java optional

在Java 8中,Optional类被实现为最终容器类,根据值isPresent定义null。这意味着不可能有一个Optional(null),虽然不常用,但对我来说似乎是一个设计缺陷。特别是,这首先取消了可选项的目的,因为您可以简单地将变量设置为null并执行通常的if (x != null),而不会由Optional引入开销。此外,Optional类必须检查对其执行的每个操作是否value == null

然而,在Scala中,Option特征要复杂得多:它具有现有值的Some子类和不存在值的None子类。这消除了对null - 类内部检查的需要,并允许Some(null)值。

我的问题是为什么Java设计者也选择不遵循这个子类原则。

1 个答案:

答案 0 :(得分:2)

Java有empty()ofNullable(null)。其他工具方法也存在。 Scala使用子类化,案例类,其他语言(仍)使用其他概念。 Scala认为打字更有效。

Java Optional是可行的;附带代码示例。使用Stream作为可选项可能更多地使用Scala的特性,允许使用链接调用进行流畅的设计,方法更为舒适。

它与null同住并且更像是你所说的推荐。