Java到Kotlin的翻译错误

Java到Kotlin的翻译错误,kotlin,Kotlin,使用最新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

使用最新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中的赋值不是表达式

  • 这是Java到Kotlin转换器中的已知错误吗

  • Kotlin的惯用语法与上面的Java代码等价吗


  • 我认为这些评论回答了我的两个问题,所以让我把它们汇编成一个答案

  • 是的,这是一个已知的错误,在。您可以投票支持它(如果您有Jetbrains帐户),向开发人员表明您希望修复它。谢谢Alexey Belkov让我注意到这一点

  • 直接翻译的常用方法是:

    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)


  • 我认为这些评论回答了我的两个问题,所以让我把它们汇编成一个答案

  • 是的,这是一个已知的错误,在。您可以投票支持它(如果您有Jetbrains帐户),向开发人员表明您希望修复它。谢谢Alexey Belkov让我注意到这一点

  • 直接翻译的常用方法是:

    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)


  • 我想上层的声明是唯一的途径部分重复的声明是已知的错误,请投票赞成我想上层的声明是唯一的途径部分重复的声明是已知的错误,请投票赞成