将 Java 转换为 Kotlin 后的"Assignments are not expressions error"



我将一些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)

正如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()
}

在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中的表达式。

相关内容

最新更新