java - 多个 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
,它可以工作。
难道我做错了什么?
解决方案
在拦截器中抛出异常是错误的,除非它是 IOException。这在 Java(有检查异常)中强制执行,但在 Kotlin(没有检查异常)中没有强制执行。
如果您抛出 IOException,它将传播回您的调用站点。如果您抛出任何其他异常类型,您的调用将被取消,并且您的异常将被传递到当前线程的未捕获异常处理程序。
推荐阅读
- bash - 在 While 循环内嵌套 If 条件
- python - 无法在不发送请求的情况下在方法之间传递参数
- python - simplejson.errors.JSONDecodeError
- python - Json 字符串解析在从 MSDOS 运行时有效,但在 Windows 上的 Ubuntu 上的 Bash 中无效
- reactjs - onChange最后一个字符不会在reactjs中删除?
- tsql - 查找发票的经常性交易
- android - 服务器收到订阅状态更改通知时如何识别用户
- angular - rxjs@6.3.3 的 rxjs catchError 导入问题
- jquery - 如何从另一个视图页面打开引导模式
- r - r函数改变值