如何为Kotlin中扩展函数引发的异常提供自定义异常消息?

如何为Kotlin中扩展函数引发的异常提供自定义异常消息?,kotlin,Kotlin,我有以下Kotlin代码: fun getAdminUser():用户{ 返回getAllUsers().first{it.userType==ADMIN}作为用户 } 如果getAllUsers()没有与指定谓词匹配的元素,它将抛出NoTouchElementException。我对这个异常很满意,但希望在异常失败时覆盖异常消息以提供更多上下文。是否可以在Kotlin中使用try catch?您可以使用firstOrNull功能来实现这一点 fun getAdminUser(): User

我有以下Kotlin代码:

fun getAdminUser():用户{
返回getAllUsers().first{it.userType==ADMIN}作为用户
}

如果
getAllUsers()
没有与指定谓词匹配的元素,它将抛出
NoTouchElementException
。我对这个异常很满意,但希望在异常失败时覆盖异常消息以提供更多上下文。是否可以在Kotlin中使用
try catch

您可以使用
firstOrNull
功能来实现这一点

fun getAdminUser(): User {
    return (getAllUsers().firstOrNull { it.userType == ADMIN } as? User) ?: throw NoSuchElementException("Element not found")
}
用于获取第一个元素或使其为null,并使用elvis运算符抛出
NoTouchElementException

fun getAdminUser():用户{
val user=getAllUsers().firstOrNull{it.userType==ADMIN}?:抛出NoSuchElementException(“我的自定义异常消息”)
返回用户为?用户?:IllegalStateException(“元素既不是null,也不是用户类的实例”)
}
否则,要在单行中执行此操作,您可以执行以下操作:

fun getAdminUser():用户{
return getAllUsers().firstOrNull{it.userType==ADMIN}?.另外{require(它是用户){“元素既不是null也不是用户类的实例”}}?:抛出NoSuchElementException(“我的自定义异常消息”)
}

getAllUsers().firstOrNull{it.userType==ADMIN}?:抛出NoSuchElementException(“我的自定义异常消息”)
@AnimeshSahu,它不适用于我的角色转换。这解决了我的问题。无需在Elvis操作员面前将零件包装在圆括号中。谢谢