首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Kotlin的使用来自定义错误消息,而不是尝试捕捉

问使用Kotlin的使用来自定义错误消息,而不是尝试捕捉
EN

Stack Overflow用户
提问于 2020-04-22 17:03:20
回答 1查看 593关注 0票数 0

我仍然在学习Kotlin和我刚刚学到的“使用”,以及它是如何替代尝试,捕捉和最后阻止。但是,我很好奇是否可以定制它的异常处理,例如:

代码语言:javascript
复制
var connection: Connection? = null
try {
    connection = dataSource.connection
    connection.prepareStatement(query).execute()
} catch (e: SQLException) {
    logger.log("Specific error for that query")
    e.printStackTrace()
} finally {
    if (connection != null && !connection.isClosed) {
        connection.close()
    }
}

该代码是我当前的代码,我想在捕获点上显示一个特定的错误,这是否可以使用use?这是我当前的使用代码:

代码语言:javascript
复制
dataSource.connection.use { connection ->
    connection.prepareStatement(query).execute()
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 17:46:46

由@Tenfour04评论,并来自文档

use在此资源上执行给定的块函数,然后不管是否抛出异常,都正确地关闭它。

尤其是像这样的实施:

代码语言:javascript
复制
public inline fun <T : AutoCloseable?, R> T.use(block: (T) -> R): R {
    var exception: Throwable? = null
    try {
        return block(this)
    } catch (e: Throwable) {
        exception = e
        throw e
    } finally {
        this.closeFinally(exception)
    }
}

如果您是Java,这段代码应该看起来很熟悉,但基本上它执行block传递this (即接收方对象)作为代码块的参数。最后,它关闭AutoCloseable资源。如果在任何时候抛出异常(无论是在block内部还是在关闭资源时),该异常将被抛回给调用方,即您的代码。

作为边缘情况,您可以有两个异常,一个在执行block时,一个在关闭资源时。这是由closeFinally (其源在上面链接的同一个文件中可用)处理的,关闭资源时抛出的异常被添加为从block抛出的异常,这是因为方法只能抛出最多一个异常,所以他们必须选择抛出哪个异常。同样的情况也适用于Java中的try-语句。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61370861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档