gpt4 book ai didi

java - Unit 的 Try 表达式不符合预期类型

转载 作者:行者123 更新时间:2023-12-01 20:18:03 25 4
gpt4 key购买 nike

我有一个场景,我需要从 Scala 代码调用 Java API,该代码返回 void 并抛出异常,以防参数无效。我目前正在按如下方式处理它,但是我想知道是否有一种方法可以避免 var 以及是否有一种惯用的方法可以在 Scala 中实现此目的:

object TestTry extends App {

def createSampleRequest(message: String): Option[SampleRequest] = {
val sampleRequest = new SampleRequest()

//I really want to avoid var
var parsedSampleRequest = Option(SampleRequest)

//Calling a Java method returns void
try sampleRequest.fromString(fix, null, true)
catch {
case e: InvalidMessage => parsedSampleRequest = Option.empty
}

parsedSampleRequest
}

}

最佳答案

一种方法是使用Try :

import scala.util.Try

def createSampleRequest(message: String): Option[SampleRequest] = {
val sampleRequest = new SampleRequest()
Try(sampleRequest.fromString(fix, null, true))
.map(s => Option(sampleRequest))
.getOrElse(None)
}

如果调用fromString抛出异常,result将为None;如果调用不引发异常,result 将是包含 sampleResult 实例的 Some[SampleRequest]

正如 @OlegPyzhcov 在评论中指出的,更简洁的版本是:

Try { sampleRequest.fromString(fix, null, true); sampleRequest } .toOption

关于java - Unit 的 Try 表达式不符合预期类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415410/

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