我想在辅助函数中包装一个 throw
,用于记录等目的。
private fun chooseEmailAddress(user: UserProfile): EmailAddress {
val emailAddress = user.emailAddresses.find {
true // some business logic
}
if (emailAddress == null) {
throwAndNotice(CustomError(
message = "No Email Address found.",
))
}
return emailAddress
}
private fun throwAndNotice(err: CustomError) {
NewRelic.noticeError(err)
throw err
}
问题:kotlin
提示类型不匹配:
Type mismatch.
Required: Email
Found: Email?
我猜编译器不知道 throwAndNotice
总是抛出异常。如果我内联 throwAndNotice
方法,它会起作用,但它会导致大约十几个方法重复。
有没有办法告诉编译器“以下方法总是抛出错误”?还是有另一种惯用的方法来处理这个问题?我不想求助于 !!
。
最佳答案
让它返回Nothing
。这表明它永远不会返回(抛出异常或无限循环):
private fun throwAndNotice(err: CustomError): Nothing {
NewRelic.noticeError(err)
throw err
}
您可以在标准库中看到执行此操作的其他示例,例如 TODO()
和 error()
.
旁注(正如 dey 在评论中提到的):
可以使用 ?:
重写 null 检查,如下所示:
return emailAddress ?: throwAndNotice(...)
关于kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73274963/