[英]Try expression of Unit does not conform to expected type
我有一種情況,我需要從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
您可以完全消除變量,並在需要的地方返回:
object TestTry extends App {
def createSampleRequest(message: String): Option[SampleRequest] = {
val sampleRequest = new SampleRequest()
try
sampleRequest.fromString(fix, null, true)
Some(sampleRequest)
catch
case e: InvalidMessage => None
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.