相关疑难解决方法(0)

在Kotlin尝试资源

当我尝试在Kotlin中编写相当于try-with-resources的代码时,它对我不起作用.

我尝试了以下不同的变体:

try (writer = OutputStreamWriter(r.getOutputStream())) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但都不起作用.

有谁知道应该使用什么?显然Kotlin语法没有这种结构的定义,但可能是我遗漏了一些东西.它定义了try块的语法,如下所示:

try : "try" block catchBlock* finallyBlock?;
Run Code Online (Sandbox Code Playgroud)

extension-methods try-with-resources kotlin

133
推荐指数
3
解决办法
2万
查看次数

我自己的解决方案是Kotlin的资源缺乏尝试

Kotlin提供了对象的use功能Closeable,但似乎他们忘记考虑AutoCloseable(例如DB预处理语句)try-with-resources完全Java等价物.

我实施了下一个"自制"解决方案:

inline fun <T:AutoCloseable,R> trywr(closeable: T, block: (T) -> R): R {
    try {
        return block(closeable);
    } finally {
        closeable.close()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用下一个方法:

fun countEvents(sc: EventSearchCriteria?): Long {
    return trywr(connection.prepareStatement("SELECT COUNT(*) FROM event")) {
        var rs = it.executeQuery()
        rs.next()
        rs.getLong(1)
    }
}
Run Code Online (Sandbox Code Playgroud)

我是Kotlin的新手,我想知道我是否遗漏了一些在我自己的解决方案中可能会给我带来生产环境中的问题/泄漏的重要内容.

try-with-resources kotlin autocloseable

6
推荐指数
1
解决办法
761
查看次数