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
相关产品推荐
相关产品推荐

