如何从Java创建ScalaZ Disjunction?

时间:2017-04-25 16:16:47

标签: java scala scalaz

为什么呢?我正在为Java-Scala Adapter类编写测试。

如何在Java中为CopySourceRange创建左右分离?

1 个答案:

答案 0 :(得分:3)

Scala方法名称中的符号实际上具有desugaring,用于在JVM中确定性地表示它们:\转向$bslash/转为$div-$minus。此外,Java无法理解Scala的Nothing类型,因此我们需要插入缺少参数的实际类型。为了减轻使用Disjunction from 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的兼容版本。