将Java转换为Kotlin后出现“赋值不是表达式错误”

时间:2018-07-15 15:59:41

标签: kotlin

我将一些Java类转换为kotlin并在尝试运行在Java中运行良好的代码时弹出“分配不是表达式,并且在此上下文中仅允许表达式”错误:

@Throws(IOException::class)
private fun readAll(rd: Reader): String {
    val sb = StringBuilder()
    var cp: Int
    while ((cp = rd.read()) != -1) {
        sb.append(cp.toChar())
    }

    return sb.toString()
}

引起问题的行:

while ((cp = rd.read()) != -1)

2 个答案:

答案 0 :(得分:2)

正如消息在Kotlin中所说,您不能将赋值用作表达式。 您可以这样做:

private fun readAll(rd: Reader): String {
    val sb = StringBuilder()
    var cp: Int
    do {
        cp = rd.read()
        if (cp == -1)
            break
        sb.append(cp.toChar())      
    } while (true) // your choice here to stop the loop 
    return sb.toString()
}

答案 1 :(得分:0)

在Kotlin中,您不能这样做:

while ((cp = rd.read()) != -1)

您应该使用类似这样的内容:

var cp = rd.read()
while (cp != -1) {
    // your logic here
    cp = rd.read()
}

或者类似这样的东西:

while (true) {
    val cp = rd.read()
    if (cp < 0) break

    // your logic here
}

因为赋值(cp = rd.read())是Java中的表达式,但不是Kotlin中的表达式。