在Java 8中,Optional
类被实现为最终容器类,根据值isPresent
定义null
。这意味着不可能有一个Optional(null)
,虽然不常用,但对我来说似乎是一个设计缺陷。特别是,这首先取消了可选项的目的,因为您可以简单地将变量设置为null
并执行通常的if (x != null)
,而不会由Optional
引入开销。此外,Optional
类必须检查对其执行的每个操作是否value == null
。
然而,在Scala中,Option
特征要复杂得多:它具有现有值的Some
子类和不存在值的None
子类。这消除了对null
- 类内部检查的需要,并允许Some(null)
值。
我的问题是为什么Java设计者也选择不遵循这个子类原则。
答案 0 :(得分:2)
Java有empty()
和ofNullable(null)
。其他工具方法也存在。 Scala使用子类化,案例类,其他语言(仍)使用其他概念。 Scala认为打字更有效。
Java Optional是可行的;附带代码示例。使用Stream
作为可选项可能更多地使用Scala的特性,允许使用链接调用进行流畅的设计,方法更为舒适。
它与null同住并且更像是你所说的推荐。