Kotlin:定义val时处理异常

我正在开发一个 kotlin 网络后端并且有这样的东西:

try {
    val uuid = UUID.fromString(someString)
} catch (e: IllegalArgumentException) {
    throw BadRequestException("invalid UUID")
}

doSomething(uuid)

上面的代码无法编译,因为uuid它在try块外未解析。

我可以想象的替代方案是:

  • doSomething(uuid)在 try 块内移动,但我宁愿避免这种情况,所以我不会意外地捕捉到其他一些潜在IllegalArgumentException的问题doSomething(如果由于某种原因发生这种情况,我希望事情失败并在我的日志中获得 500,以便我可以进行调查)
  • 改用可空值var并将其初始化为空值,但这似乎有点难看?

throw BadRequestException否则这种模式运行良好,所以我不想更改方法的返回类型或类似的东西以避免抛出。

在 Kotlin 中是否有更好/更优雅/推荐的模式?

回答

在 Kotlin 中,try/catch 可以用作表达式。抛出的分支不会影响解析的类型。所以你可以写:

val uuid = try {
    UUID.fromString(someString)
} catch (e: IllegalArgumentException) {
    throw BadRequestException("invalid UUID")
}


以上是Kotlin:定义val时处理异常的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>