相关疑难解决方法(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中表达Java的try-with-resources构造时遇到了一些麻烦.在我的理解中,作为实例的每个表达式都AutoClosable应该提供use扩展函数.

这是一个完整的例子:

import java.io.BufferedReader;
import java.io.FileReader;

import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;

public class Test {

    static String foo(String path) throws Throwable {
        try (BufferedReader r =
           new BufferedReader(new FileReader(path))) {
          return "";
        }
    }

    static String bar(TupleQuery query) throws Throwable {
        try (TupleQueryResult r = query.evaluate()) {
          return "";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Java-to-Kotlin转换器创建此输出:

import java.io.BufferedReader
import java.io.FileReader

import org.openrdf.query.TupleQuery
import org.openrdf.query.TupleQueryResult

object Test {

    @Throws(Throwable::class)
    internal fun foo(path: String): String {
        BufferedReader(FileReader(path)).use { r -> …
Run Code Online (Sandbox Code Playgroud)

java try-with-resources kotlin

10
推荐指数
2
解决办法
3861
查看次数