首页 > 解决方案 > 多个 catch 块在投掷方法中失败

问题描述

目前,我有以下方法

另一种方法简化为以下内容:

suspend fun <T> handleRequest(
  requestCaller: suspend() -> Response<T>
): Result<Something, T> {
  return try {
    requestCaller.invoke()
  } catch(ioException: IOException) {
  } catch(exception: Exception) {
  } 
}

当我调用上述方法并requestCaller.invoke()throwIllegalStateException时,根本没有捕获到异常。

但是,当我删除第一个 catch 块时IOException,它可以工作。

难道我做错了什么?

标签: javaandroidkotlin

解决方案


在拦截器中抛出异常是错误的,除非它是 IOException。这在 Java(有检查异常)中强制执行,但在 Kotlin(没有检查异常)中没有强制执行。

如果您抛出 IOException,它将传播回您的调用站点。如果您抛出任何其他异常类型,您的调用将被取消,并且您的异常将被传递到当前线程的未捕获异常处理程序。


推荐阅读