【问题标题】:How to create ScalaZ Disjunction from Java?如何从 Java 创建 ScalaZ Disjunction?
【发布时间】:2017-04-25 16:16:47
【问题描述】:

为什么?我正在为 Java-Scala 适配器类编写测试。

如何在Java中为\/[String, Int]创建左右分离?

【问题讨论】:

    标签: java scala scalaz


    【解决方案1】:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2017-03-10
      • 2018-02-17
      • 2011-08-19
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多