Java Optional 和 Scala Option 之间的区别

2022-09-01 23:43:47

最后,本文介绍了新的Java 8,指出Optional

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

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

例如,我知道在Scala中,我可以使用模式匹配来测试并让我的生活更轻松。但是,除了Scala语法的特性之外,我想知道在Scala中是否可以做一些我在Java中无法做到的事情。OptionOptionOptional

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


答案 1

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

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

(我的 - 尽管鉴于新方法,我不会那么坚持“从不”)default

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

首先,当你开始使用Scala时,你很可能会接触到它,因此它的使用模式-最值得注意的是,通过Scala的Map#get

相反,如果你看看Scala的Option API,你会发现它被“拼接”到Scala的集合层次结构中,这意味着你可以在需要时透明地将其用作集合 - 例如,没有,比如说,你的库的最终开发人员来处理它的特殊性。


答案 2

我想补充一下前面的答案,除了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


推荐