有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么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) 个答案

  1. # 1 楼答案

    Java有empty()ofNullable(null)。其他工具方法也存在。Scala使用子类化、case类,而其他语言(仍然)使用其他概念。Scala认为键入更具操作性

    Java可选是可行的;附带代码示例。使用Stream作为可选函数可能更符合Scala的特点,允许以更舒适的方式流畅地设计链接调用

    它与null共存,更像您所说的是一个建议