[英]Parsing scalaz.Validation in Java
我有一個帶有以下簽名的scala函數:
def getValue: Validation[ Throwable, String ]
現在,我想在Java中處理調用此函數的結果(例如res
)。
我可以調用res.isSuccess()
和res.isFailure()
但是如何提取底層的Throwable
或成功String
?
我嘗試了但是測試(res instanceof scalaz.Failure)
導致scalaz.Failure cannot be resolved to a type
(scala和scalaz jar可見)
有沒有一種通用的方法來Validation
, Option
, Either
......等等?
編輯我意識到我可能會使用fold
但這將導致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());
}
}
}
對於Option
和Either
您可以使用get
方法(在Either
的情況下進行left
投影或right
投影之后)。
但是,如果可能的話,在Scala方面進行fold
等的這種展開可能更加清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.