
java monad是什么,让我们一起了解一下?
Monad是一个代码名字,意思是单子代表Windows上的一个新的交互式命令行工具以及面向对象的脚本技术。Monad也被称为MSH,是下一代的Windows命令shell,用全新的角度来完成各式各样的管理任务。
Monad定义的要素有哪些?
在定义 Monad 时需要提供一个类型构造器 M 和两个操作 unit 和 bind:
1、类型构造器的作用是从底层的类型中创建出一元类型(monadic type)。如果 M 是 Monad 的名称,而 t 是数据类型,则 M t 是对应的一元类型。
2、unit 操作把一个普通值 t 通过类型构造器封装在一个容器中,所产生的值的类型是 M t。unit 操作也称为 return 操作。return 操作的名称来源于 Haskell。不过由于 return 在很多编程语言中是保留关键词,用 unit 做名称更为合适。

3、bind 操作的类型声明是 (M t)→(t→M u)→(M u)。该操作接受类型为 M t 的值和类型为 t → M u 的函数来对值进行转换。在进行转换时,bind 操作把原始值从容器中抽取出来,再应用给定的函数进行转换。函数的返回值是一个新的容器值 M u,M u 可以作为下一次转换的起点。多个 bind 操作可以级联起来,形成处理流水线。
具体代码示例如下:
public class LoggingMonad {
private final T value;
private final List logs;
public LoggingMonad(T value, List logs) {
this.value = value;
this.logs = logs;
}
@Override
public String toString() {
return "LoggingMonad{" +
"value=" + value +
", logs=" + logs +
'}';
}
public static LoggingMonad unit(T value) {
return new LoggingMonad<>(value, List.of());
}
public static LoggingMonad bind(LoggingMonad input,
Function transform) {
final LoggingMonad result = transform.apply(input.value);
List logs = new ArrayList<>(input.logs);
logs.addAll(result.logs);
return new LoggingMonad<>(result.value, logs);
}
public static LoggingMonad pipeline(LoggingMonad monad,
List> transforms) {
LoggingMonad result = monad;
for (Function transform : transforms) {
result = bind(result, transform);
}
return result;
}
public static void main(String[] args) {
Function transform1 =
v -> new LoggingMonad<>(v * 4, List.of(v + " * 4"));
Function transform2 =
v -> new LoggingMonad<>(v / 2, List.of(v + " / 2"));
final LoggingMonad result =
pipeline(LoggingMonad.unit(8),
List.of(transform1, transform2));
System.out.println(result); // 输出为 LoggingMonad{value=16,
logs=[8 * 4, 32 / 2]}
}
} 以上就是小编今天的分享了,希望可以帮助到大家。
