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

Kotlin中UseCaseException的extractException方法为何保留else分支?

关于UseCaseException中else分支存在原因的解析

先看整理后的代码:

sealed class UseCaseException(override val cause: Throwable?) : Throwable(cause) {

    class LocationException(cause: Throwable) :
        UseCaseException(cause)
    class UnknownException(cause: Throwable) :
        UseCaseException(cause)

    companion object {
        fun extractException(throwable: Throwable): UseCaseException {
            return if (throwable is UseCaseException)
                throwable
            else
                UnknownException(throwable)
        }
    }
}

else分支的存在原因很明确,主要有这几点:

  • 处理非自定义体系的异常:else分支专门用来处理所有不属于UseCaseException及其子类的Throwable实例。比如Java/Kotlin标准库抛出的NullPointerException、IOException,或者第三方SDK抛出的自定义异常,这些都不在我们的UseCaseException家族里,这时候就会走else分支把它们包装成UnknownException,统一成我们定义的异常类型返回。
  • 兼容后续的异常扩展:目前UseCaseException只有两个子类,但如果后续业务需要新增其他异常类型(比如NetworkException、AuthException),只要新异常是UseCaseException的子类,就会自动走if分支返回,不需要修改extractException的逻辑;而外来异常依然由else分支兜底包装,保证方法的扩展性。
  • 保证返回类型的统一性:这个方法的返回值固定是UseCaseException,else分支就是兜底逻辑,确保不管输入什么类型的Throwable,最终都能转换成符合要求的返回类型,不会出现类型不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:43:20