在Java中解析scalaz.Validation
我有一个带有以下签名的scala函数:在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可见) 对于验证,选项,或等,
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一侧使用折叠等方式进行这种展开可能会更干净