如何从 Java 创建 ScalaZ 析取?
How to create ScalaZ Disjunction from Java?
为什么?我正在为 Java-Scala Adapter class.
编写测试
如何在 Java 中为 \/[String, Int]
创建左右分离?
Scala 方法名称中的符号实际上有脱糖,用于在 JVM 中确定性地表示它们:\
变为 $bslash
,/
变为 $div
和 -
到 $minus
。此外,Java 无法理解 Scala 的 Nothing 类型,因此我们需要插入缺失参数的实际类型。为了减轻使用 Java 的析取的痛苦,我们可以构建以下小助手(连同测试方法):
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 的兼容版本。
为什么?我正在为 Java-Scala Adapter class.
编写测试如何在 Java 中为 \/[String, Int]
创建左右分离?
Scala 方法名称中的符号实际上有脱糖,用于在 JVM 中确定性地表示它们:\
变为 $bslash
,/
变为 $div
和 -
到 $minus
。此外,Java 无法理解 Scala 的 Nothing 类型,因此我们需要插入缺失参数的实际类型。为了减轻使用 Java 的析取的痛苦,我们可以构建以下小助手(连同测试方法):
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 的兼容版本。