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

