kotlin - 我应该在 Kotlin 中使用 Closable.use{...} 处理异常吗?
问题描述
根据来源Closable.use
,如果发生错误,就会抛出异常。
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var exception: Throwable? = null
try {
return block(this)
} catch (e: Throwable) {
exception = e
throw e
} finally {
when {
apiVersionIsAtLeast(1, 1, 0) -> this.closeFinally(exception)
this == null -> {}
exception == null -> close()
else ->
try {
close()
} catch (closeException: Throwable) {
// cause.addSuppressed(closeException) // ignored here
}
}
}
在大多数示例中Closable.use
,不使用 try-catch,如下所示。为什么不需要错误处理?安全吗?
BufferedReader(FileReader("test.file")).use { return it.readLine() }
解决方案
我们从 Kotlin 文档中看到该use
函数的用途是什么:
在此资源上执行给定的块函数,然后无论是否引发异常都正确关闭它。
如果块函数成功完成或抛出异常,此函数会正确关闭资源。处理块函数的结果是您的责任。
如果抛出异常并且有办法处理它并继续执行代码,请使用 try/catch。如果对此无事可做并且控制权应该传递给调用者,则没有必要使用 try/catch。
推荐阅读
- python-2.7 - How to implement the 0.5*||euclidean_norm||^2?
- java - 如何使用 Spring @Value 注入 Maps
- python - Python模块运行但函数不会
- vba - 如何根据 VBA 中的条件创建工作表和工作簿?
- regex - 输入格式特定的正则表达式
- python-3.x - 如何使用 selenium 和 python 在 Fireforx Web 驱动程序中添加扩展
- python - 返回不可调用的装饰器可以接受额外的参数吗?
- python - python:字典到.csv文件
- sql - 给出错误运算符的正则表达式运算符不存在:bigint ~ 未知
- javascript - 为自身功能计算逆变器转换