在Java中解析scalaz.Validation

在Java中解析scalaz.Validation,java,scala,scalaz,Java,Scala,Scalaz,我有一个带有以下签名的scala函数: def getValue: Validation[ Throwable, String ] 现在,我想用Java处理调用此函数的结果(比如res) 我可以调用res.issucess()和res.isFailure(),但是如何提取底层的可丢弃的或成功字符串 我尝试了强制转换,但测试(res instanceof scalaz.Failure)会导致scalaz.Failure无法解析为类型(scala和scalaz jar可见) 对于验证,选项,或等,

我有一个带有以下签名的scala函数:

def getValue: Validation[ Throwable, String ]
现在,我想用Java处理调用此函数的结果(比如
res

我可以调用
res.issucess()
res.isFailure()
,但是如何提取底层的
可丢弃的
或成功
字符串

我尝试了强制转换,但测试
(res instanceof scalaz.Failure)
会导致
scalaz.Failure无法解析为类型
(scala和scalaz jar可见)

对于
验证
选项
等,是否有一种通用的方法


编辑我意识到我可能可以使用
折叠
,但这会导致Java中出现大量难看的样板代码(不需要更多)。有什么好看的吗?

Success
Failure
都是案例类:

final case class Success[E, A](a: A) extends Validation[E, A]
final case class Failure[E, A](e: E) extends Validation[E, A]
因此,您可以编写以下内容,例如:

import scalaz.*;

public class Javaz {
  public static void main(String[] args) {
    Validation<Throwable, String> res = new Success<Throwable, String>("test");

    if (res.isSuccess()) {
      System.out.println(((Success) res).a());
    } else {
      System.out.println(((Failure) res).e());
    }
  }
}
导入scalaz.*;
公共类Javaz{
公共静态void main(字符串[]args){
验证res=新的成功(“测试”);
如果(res.isSuccess()){
System.out.println(((Success)res.a());
}否则{
System.out.println(((Failure)res.e());
}
}
}
对于
选项
任一
可以使用
获取
方法(在
任一
的情况下使用
投影后)

不过,如果可能的话,在Scala一侧使用
折叠等方式进行这种展开可能会更干净