代码之家  ›  专栏  ›  技术社区  ›  DodgyCodeException

Java到Kotlin的翻译错误

  •  0
  • DodgyCodeException  · 技术社区  · 7 年前

    使用最新IntelliJ IDEA 2018.3中最新的Kotlin 1.3.10插件,如果我将以下Java代码翻译成Kotlin:

        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)
    

    这个 while ((line = br.nextLine()) != null) 是惯用Java,但它的自动翻译会导致非法语法,因为Kotlin中的赋值不是表达式。

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

    2. Kotlin的惯用语法与上面的Java代码等价吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   DodgyCodeException    7 年前

    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)
      }
      

      Files.lines(Path) ).