Java到Kotlin的翻译错误

时间:2018-11-22 11:03:38

标签: kotlin

如果我将以下Java代码转换为Kotlin,则使用来自最新IntelliJ IDEA 2018.3的最新Kotlin 1.3.10插件:

String eqps = "";
String[] pts = rs.getString("equipamento").split(",");
for (String c : pts) {
  eqps += c.split(":")[1].trim() + ",";
}

我明白了:

    BufferedReader br = Files.newBufferedReader(Paths.get("filename"));
    String line;
    while ((line = br.readLine()) != null)
        System.out.println(line);

val br = Files.newBufferedReader(Paths.get("filename")) var line: String while ((line = br.readLine()) != null) println(line) 是惯用的Java,但由于Kotlin中的赋值不是表达式,因此其自动翻译会导致语法不合法。

  1. 这是Java到Kotlin转换器中的已知错误吗?

  2. 与上述Java代码等效的Kotlin惯用语法是什么?

1 个答案:

答案 0 :(得分:2)

我认为评论已回答了我的两个问题,所以让我将其汇总为一个答案。

  1. 是的,这是一个已知的错误,报告于youtrack.jetbrains.com/issue/KT-6294。您可以投票给它(如果您有一个Jetbrains帐户),以向开发人员展示您希望修复它。感谢Alexey Belkov引起我的注意。

  2. 直接翻译它的常见方法是:

    val br = Files.newBufferedReader(Paths.get("filename"))
    var line: String
    while (br.readLine().also { line = it} != null)
        println(line)
    

    但是,在这种情况下,更好的方法是:

    val br = Files.newBufferedReader(Paths.get("filename"))
    br.forEachLine {
        println(it)
    }
    

    或者只是

    File("filename").forEachLine {
        println(it)
    }
    

    (使用便捷方法,等效于Java的便捷方法Files.lines(Path))。