Java 8的Optable,Scala的Option和Haskell的Maybe之间有什么主要区别?

2022-09-04 20:40:32

我已经阅读了几篇关于Java 8即将推出的Optant类型的文章,我试图理解为什么人们一直认为它不如Scala的Option那么强大。据我所知,它有:

  • 更高阶的函数,如使用 Java 8 lambdas 的映射和过滤器。
  • 莫尼迪克平面地图
  • 通过 getOrElse 类型函数进行短路。

我错过了什么?


答案 1

一些可能性浮现在脑海中(OTOH,我还没有看到人们真正这么说,所以他们可能意味着别的东西):

  1. 无模式匹配。

  2. 没有等同于Scala或Haskell的:你必须这样做。foldfromMaybeoptional.map(...).orElseGet(...)

  3. 没有一元语法。

我自己也不会称这些“功能较弱”中的任何一个,因为你可以用相应的Scala/Haskell类型表达你所能做的一切;这些都是简洁/可用性问题。


答案 2

Optional并有效地进行通信。Scala具有和子类,这可能更直接地与Java相媲美,因为Java也可以做同样的事情。MaybeNoneSome[A]Option[A]

大多数其他差异要么与Haskell / Scala中的易处理性有关,因为Java作为一种语言的表达性较差,因此无法翻译,或者在Haskell / Scala中使用/的一致性,其中该类型提供的许多保证和便利性仅在大多数库同意使用可选类型而不是s或异常时才启动。MaybeOptionMaybeOptionnull


推荐