23

最后,这篇介绍新 Java 8Optional的文章指出,

Optional 不如 Scala 中的 Option[T] 强大(但至少它不允许包装 null)。API 不像 null 处理那么简单,而且可能要慢得多。但是编译时检查的好处加上 Optional 的可读性和文档价值始终如一地大大胜过缺点

我对 Scala 有非常基本的了解,并且对 Java 8 很熟悉Optional,所以乍一看,我不清楚两者之间有什么区别(如果有的话)。

例如,我知道在 Scala 中,我可以使用模式匹配来测试Option并让我的生活更轻松。但是,不包括 Scala 语法的特性,我想知道是否有一些我可以Option在 Scala 中做而Optional在 Java 中无法做到的事情。

希望这不会被标记为愚蠢的问题,但是每次我读到“强大”时,问号都会飞过我的头。

4

2 回答 2

17

如果我们谈论的是与语法无关的差异,Tomasz Nurkiewicz 几乎强调了他博客文章开头段落中最大的差异:

Optional 是在 Java 8 中引入的,因此很明显它没有在整个标准 Java 库中使用- 并且永远不会出于向后兼容性的原因。

default(emph。我的——尽管考虑到新方法,我不会那么坚持“从不” )

因此,Scala 的最大区别和最大优势Option似乎只是它更紧密地集成到语言的 API中。

首先,在您开始使用 Scala 的早期,您很可能会接触到它,以及它的使用模式——最值得注意的是,通过 Scala 的Map#get.

反过来——如果你看一下 Scala 的Option API,你会发现它被“拼接”到了 Scala 的集合层次结构中,这意味着你可以在需要时透明地将它用作集合——例如,没有你的最终开发者图书馆一直在处理其特殊性。

于 2014-02-12T05:53:42.203 回答
0

我想在前面的答案中补充一点,除了 Java Optional 没有集成到标准 Java 库(当然还有其他库)之外,还有另一个很大的区别。

Java Optional 不是可序列化的,因此不能在任何应该可序列化的 Java Bean 的字段中使用。

Java 可选规范:https ://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

Scala 选项规范:https ://www.scala-lang.org/api/2.12.x/​​scala/Option.html

于 2018-12-05T16:11:47.390 回答