Java Optional和Scala Option之间的区别

gia*_*olo 22 java scala optional scala-option

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

可选项并不像Scala中的Option [T]那么强大(但至少它不允许包装null).API不像null处理那么简单,可能要慢得多.但编译时检查的好处加上可选性的可读性和文档值始终大大优于劣势

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

我知道,例如,在Scala中我可以使用模式匹配来测试Option并让我的生活更轻松.但是,排除Scala语法的特性,我想知道Option在Scala中是否可以用OptionalJava 做些什么.

希望这不是一个愚蠢的问题,但每当我读到"强大的"时,问号就会浮现在我的头上.

mik*_*łak 16

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

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

(emph.我的 - 虽然我不会如此坚持"从不",鉴于新的default方法)

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

首先,当你开始使用Scala时,你很可能会在早期使用Scala时获得它的使用方式,特别是通过Scala Map#get.

反过来 - 如果你看看Scala的Option API,你会看到它被"拼接"到Scala的集合层次结构中,这意味着你可以在需要的时候透明地将它作为一个集合使用 - 例如,没有你的最终开发人员图书馆一直在处理它的特殊性.

  • @giampaolo:实质上,是的.*basic*语义大致相同,Java的`Optional`甚至是monadic(`= of unit`,`flatMap~ = bind`)."权力"来自与各语言标准库的集成和使用.这看起来似乎不是什么大不了的事,但影响深远 - 在这方面,seand的最后评论是现实的. (3认同)
  • 我认为另一个因素是 Scala,与 Java 不同,非常不鼓励使用空引用。我认为仅此一项就会降低 Java 的 Optional 在实际应用程序中的实用性...... (2认同)