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")
}