当前位置: 首页 > 知识库问答 >
问题:

Java可选和Scala选项之间的区别

徐知
2023-03-14

最后,本文介绍了新的Java 8<code>Optional<code>,指出:

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

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

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

希望这不是一个愚蠢的问题,但每次我读到“强大”时,我的头上都会出现问号。

共有2个答案

子车俊哲
2023-03-14

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

Java Optional是不可序列化的,因此不能用于任何应可序列化的Java Beans的字段中。

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

沈飞跃
2023-03-14

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

可选是在Java8中引入的,因此很明显它不会在整个标准Java库中使用——而且永远不会因为向后兼容的原因而使用。

(强调。我的——尽管考虑到新的默认方法,我不会那么坚持“永远”)

因此,Scala的< code >选项的最大区别和最大优势似乎很简单,那就是它更紧密地集成到了语言的API中。

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

相反,如果你看看Scala的Option API,你会发现它被“拼接”到Scala的集合层次结构中,这意味着你可以在任何需要的时候透明地将它作为一个集合来使用,例如,你的库的最终开发者不需要处理它的特殊性。

 类似资料:
  • 如果像Apple在Swift编程中所说的隐式展开选项应该总是有一个值,那么为什么不使用非选项来代替呢?我知道非选项不能赋值为nil,但还有其他区别吗?

  • 我需要将Scala选项转换为Java可选。我写下了这样的话: 但是我不喜欢。 有没有简单的方法来做到这一点,或者内置的scala转换器?我正在寻找类似的东西:

  • 问题内容: 我需要测试返回可选值的表达式是否为。这似乎很容易,但是这里是代码。 由于某种原因,这令我不悦。 对我来说看起来好多了,但是我实际上不需要该物品,我只需要知道是否退货即可。因此,我使用了以下内容。 我在这里想念些微妙的东西吗?我想和这里是等价的。 更新以解决答案中的一些问题 我不明白之间的差别和,虽然我一般使用。在这种情况下,在块之后推入将获得混合的块的布尔比较与if的布尔比较。 通配符

  • 一开始我对强制展开和隐式展开非常困惑。现在,以下是我自学的体会: 没有可用于隐式展开的操作,但有一种称为隐式展开选项的东西。隐式展开选项和普通选项都是选项,区别在于当访问隐式展开选项时,您可以自信地知道引擎盖下有一个有效值并可供使用。如果让绑定或强制展开()操作,普通选项需要

  • 问题内容: 我知道这是 ld 的选项。我见过有人这样编译 这样的人 因此,我想知道和之间是否存在差异。 谢谢。 问题答案: 存在 是 通过之间的差,以GCC或给ld(通过)。传递给GCC可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的文件。 要获取更多信息,请在GCC的目录和子目录中使用grep 。 编辑: 举一个具体的例子:在i386 FreeBSD上,将链接到目标文件中,而没有时,它将

  • 本文向大家介绍Scala和Haskell之间的区别,包括了Scala和Haskell之间的区别的使用技巧和注意事项,需要的朋友参考一下 Scala和Haskell都是最近开发的现代编程语言。但是两者都是不同类型的编程语言。同样,两者都是为了实现不同的目的而创建的。 在这里,我们将看到编程语言之间的区别点。但是首先,学习一些编程语言的基础知识。 Scala编程语言 Scala是基于Java构建的通用