gpt4 book ai didi

java - 在 Scala 中处理来自 Java API 调用的 null 和异常

转载 作者:行者123 更新时间:2023-11-30 08:34:08 28 4
gpt4 key购买 nike

我有以下代码(简化):

def getSomething(name: String): MyError \/ Option[Int] = {
/* Returns Null if name doesn't exist, IOException if connection err. */
val output: queryDB(name)

// ...
}

queryDB 函数是 Java 调用。

我希望发生以下情况:IOException 映射到 MyErrornull 映射到 None。我应该如何进行?

我知道我可以将输出包装在 Option 中,因为 null 被映射到 None。但是,如何管理异常?

谢谢。

最佳答案

我会结合使用 OptionTry

import scala.util.{ Try, Success, Failure }

def getSomething(name: String): MyError \/ Option[Int] = {

Try(queryDB(name)) match {
case Success(v) => Option(v).right // in case v is null, this returns a None
case Failure(e) => MyError().left
}

}

这会将所有异常变为 MyError。如果您需要特定的错误处理,您可以在 e 上匹配并具有更多粒度。

我还使用来自 scalaz 的 syntax 包的 .right.left。如果您不使用它们,可以分别用 \/-(Option(v))-\/(MyError()) 替换它们。

关于java - 在 Scala 中处理来自 Java API 调用的 null 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39038574/

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