gpt4 book ai didi

java - 在 Java 中解析 scalaz.Validation

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:55 24 4
gpt4 key购买 nike

我有一个具有以下签名的 Scala 函数:

def getValue: Validation[ Throwable, String ]

现在,我想在 Java 中处理调用此函数的结果(比如 res)。

我可以调用 res.isSuccess()res.isFailure() 但如何提取底层 Throwable 或成功 字符串 ?

我尝试转换,但测试 (res instanceof scalaz.Failure) 结果 scalaz.Failure cannot be resolved to a type (scala 和 scalaz jar 可见)

对于 ValidationOptionEither 等是否有通用的方法...?

编辑 我意识到我或许可以使用 fold 但这会导致 Java 中出现很多丑陋的样板代码(不需要更多)。有更好看的吗?

最佳答案

SuccessFailure 都是案例类:

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());
}
}
}

对于 OptionEither 您可以使用 get 方法(在 leftEither 的情况下是正确的 投影。

不过,如果可能的话,在 Scala 端使用 fold 等进行这种解包可能会更干净。

关于java - 在 Java 中解析 scalaz.Validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com