【发布时间】:2017-04-25 16:16:47
【问题描述】:
为什么?我正在为 Java-Scala 适配器类编写测试。
如何在Java中为\/[String, Int]创建左右分离?
【问题讨论】:
为什么?我正在为 Java-Scala 适配器类编写测试。
如何在Java中为\/[String, Int]创建左右分离?
【问题讨论】:
Scala 方法名称中的符号实际上具有去糖功能,用于在 JVM 中确定性地表示它们:\ 变为 $bslash,/ 变为 $div 和 - 变为 $minus。此外,Java 无法理解 Scala 的 Nothing 类型,因此我们需要插入缺失参数的实际类型。为了减轻在 Java 中使用 Disjunction 的痛苦,我们可以构造一个小助手(以及测试方法):
import scalaz.*;
public class JavaDisjunctionHelper {
public static <A, B> $bslash$div<A, B> left(A a) {
return new $minus$bslash$div(a);
}
public static <A, B> $bslash$div<A, B> right(B b) {
return new $bslash$div$minus(b);
}
public static void main(String[] args) {
$bslash$div<String, Integer> p = left("z");
$bslash$div<String, Integer> q = right(3);
System.out.println(p); // -\/("z")
System.out.println(q); // \/-(3)
}
}
这似乎适用于 Java 8 以及可能从 Java 5 开始的任何版本,假设您拥有兼容版本的 Scala 运行时和 Scalaz。
【讨论】: