Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的monad模拟是什么?_Java_Scala_Functional Programming - Fatal编程技术网

Java中的monad模拟是什么?

Java中的monad模拟是什么?,java,scala,functional-programming,Java,Scala,Functional Programming,我知道,在Scala和许多其他函数式语言中,有一些monad主要只是一种接口实现(例如,在Scala中使用flatMap[T]和unit[T]方法),有没有任何Java风格的接口可以是monad?没有,因为monad接口需要所谓的高级类型,而Java中不存在这种类型。当然,您可以在Java中实现许多(不是全部)特定的单子。在Java中表示单子有两个问题: flatMap需要对返回(相同)特定monad的函数进行操作,而Java的类型系统无法表达这一点 unit在Java术语中是一种静态方法,因为

我知道,在Scala和许多其他函数式语言中,有一些monad主要只是一种接口实现(例如,在Scala中使用flatMap[T]和unit[T]方法),有没有任何Java风格的接口可以是monad?

没有,因为monad接口需要所谓的高级类型,而Java中不存在这种类型。当然,您可以在Java中实现许多(不是全部)特定的单子。

在Java中表示单子有两个问题:

flatMap
需要对返回(相同)特定monad的函数进行操作,而Java的类型系统无法表达这一点

unit
在Java术语中是一种静态方法,因为它从泛型值创建monad实例。Java8在接口上有静态方法,但抽象monad接口无法知道实现,因此您必须在其他地方使用工厂方法(或者只使用构造函数)


正如@AlexeyRomanov所建议的,您可以实现特定的monad(例如,制作一个
选项
接口),但是monad的抽象概念在Java中是不可能实现的。这当然意味着您无法创建所有适用于任何monad的有用函数。

您感兴趣的Java版本是什么<代码>@CostiCiudatu主要是7个,但对我来说8个就足够了