为什么java会这么做。util。可选的没有一些和没有子类?
在Java8中,Optional
类被实现为最终的容器类,它根据null
的值定义isPresent
。这意味着不可能有一个Optional(null)
,虽然不常用,但对我来说似乎是一个设计缺陷。特别是,这首先破坏了使用可选变量的目的,因为您可以简单地将变量设置为null
并执行通常的if (x != null)
,而不需要Optional
引入的开销。此外,Optional
类必须检查value == null
是否适用于对其执行的每个操作
然而,在Scala中,Option
特征要复杂得多:它有Some
子类用于存在的值,有None
子类用于不存在的值。这样就不需要在类内部进行null
检查,并允许使用Some(null)
值
我的问题是为什么Java设计人员选择不遵循这个子类原则
# 1 楼答案
Java有
empty()
和ofNullable(null)
。其他工具方法也存在。Scala使用子类化、case类,而其他语言(仍然)使用其他概念。Scala认为键入更具操作性Java可选是可行的;附带代码示例。使用
Stream
作为可选函数可能更符合Scala的特点,允许以更舒适的方式流畅地设计链接调用它与null共存,更像您所说的是一个建议