Как создать дизъюнкцию ScalaZ из Java?

Почему? Я пишу тесты для класса адаптера Java-Scala.

Как создать левую и правую дизъюнкцию для \/[String, Int] в Java?


person Dmytrii S.    schedule 25.04.2017    source источник


Ответы (1)


Символы в именах методов Scala фактически имеют десугарирование, используемое для детерминированного представления их в JVM: \ превращается в $bslash, / в $div и - в $minus. Кроме того, Java не может понять тип Scala Nothing, поэтому нам нужно вставить фактический тип отсутствующего аргумента. Чтобы облегчить боль от использования Disjunction из 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.

person P. Frolov    schedule 27.04.2017