什么是Java中的monad模拟?

时间:2015-05-15 06:13:32

标签: java scala functional-programming

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

2 个答案:

答案 0 :(得分:6)

不,因为monad接口需要所谓的高级类型,而这些类型在Java中并不存在。当然,您可以在Java中实现许多(并非所有)特定的 monad。

答案 1 :(得分:5)

在Java中表示monad有两个问题:

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

unit在Java术语中是一种静态方法,因为它从通用值创建monad 实例。 Java 8在接口上有静态方法,但是 abstract monad接口不能知道实现,所以你必须在其他地方使用工厂方法(或者只使用构造函数)。

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