Почему? Я пишу тесты для класса адаптера Java-Scala.
Как создать левую и правую дизъюнкцию для \/[String, Int]
в Java?
Почему? Я пишу тесты для класса адаптера Java-Scala.
Как создать левую и правую дизъюнкцию для \/[String, Int]
в Java?
Символы в именах методов 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.