我将一些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)
答案 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中的表达式。