You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何获取自定义异常携带的ExceptionDetail字段信息?

在Kotlin中获取自定义异常携带的ExceptionDetail详情

你当前的CustomException实现存在一个关键问题:它仅将ExceptionDetail中的文本信息(代码里写的message?.errorMessage大概率是笔误,应该对应ExceptionDetail里的message属性)传给了父类Exception的构造参数,但没有保存ExceptionDetail对象本身,因此抛出异常后无法直接获取完整的结构化详情。

解决思路很直接——给CustomException添加一个属性来持有ExceptionDetail的引用:

修改后的CustomException实现

data class ExceptionDetail(
    val thrownBy: String,
    val calculationStage: Int,
    val code: Int = 0,
    val message: String = "",
)

class CustomException(
    // 添加属性保存ExceptionDetail对象
    val detail: ExceptionDetail? = null,
    cause: Throwable? = null
) : Exception(detail?.message, cause) {
    // 保留原有的构造函数
    constructor(cause: Throwable) : this(null, cause)
}

捕获异常并获取详情

抛出CustomException后,在catch块里直接访问异常的detail属性,就能拿到完整的结构化异常信息:

try {
    throw CustomException(ExceptionDetail(thrownBy = "inner", calculationStage = 9))
} catch (e: CustomException) {
    e.detail?.run {
        println("抛出者:$thrownBy")
        println("计算阶段:$calculationStage")
        println("错误码:$code")
        println("错误信息:$message")
    }
}

通过这种方式,你就能轻松获取到抛出异常时携带的所有结构化详情。

内容的提问来源于stack exchange,提问作者Beqa Huelu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:24:59