Java中的monad模拟是什么?
我知道,在Scala和许多其他函数式语言中,有一些monad主要只是一种接口实现(例如,在Scala中使用flatMap[T]和unit[T]方法),有没有任何Java风格的接口可以是monad?没有,因为monad接口需要所谓的高级类型,而Java中不存在这种类型。当然,您可以在Java中实现许多(不是全部)特定的单子。在Java中表示单子有两个问题: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术语中是一种静态方法,因为
flatMap
需要对返回(相同)特定monad的函数进行操作,而Java的类型系统无法表达这一点
unit
在Java术语中是一种静态方法,因为它从泛型值创建monad实例。Java8在接口上有静态方法,但抽象monad接口无法知道实现,因此您必须在其他地方使用工厂方法(或者只使用构造函数)
正如@AlexeyRomanov所建议的,您可以实现特定的monad(例如,制作一个
选项
接口),但是monad的抽象概念在Java中是不可能实现的。这当然意味着您无法创建所有适用于任何monad的有用函数。您感兴趣的Java版本是什么<代码>@CostiCiudatu主要是7个,但对我来说8个就足够了