我正在将一个大型项目转换为Kotlin。有许多挑战。我学习Kotlin的新模式就是其中之一。希望有一种模式可以用来解决这个问题。
这是我试图实现的代码。但是,continue
和break
在when
声明中无效。
while (!mStopped && c.moveToNext()) {
val itemType = c.getInt()
when (itemType) {
1, 2 -> {
doSomething()
if (condition)
continue
doSomethingElse()
}
}
doTheLastStuff()
}
这是代码的一个非常简化的版本。原始的java代码在switch语句中有100行,有很多continue
和break
。
我想要实现的是继续执行while
语句。在Kotlin中这样做的模式是什么
答案 0 :(得分:6)
您可以使用labels继续/中断循环,即:
myLoop@ while (!mStopped && c.hasNext()) {
val itemType = c.next()
when (itemType) {
1, 2 -> {
doSomething()
if (condition())
continue@myLoop
doSomethingElse()
}
}
doTheLastStuff()
}
以下是文档的相关摘录:
Kotlin中的任何表达都可能标有标签。标签有 标识符的形式后跟@符号,例如:abc @, fooBar @是有效标签(...) 使用标签限定的中断跳转到执行点右侧 在标有该标签的循环之后。继续进行到下一个 迭代循环。
答案 1 :(得分:6)
这里的问题是break
和continue
在when
语句中具有特殊含义,即打破并继续when
本身,而不是周围的循环。就目前而言(kotlin 1.0),语法尚未确定,因此尽管保留了关键字,但该功能仍无效。
要解决此问题,请使用标签https://kotlinlang.org/docs/reference/returns.html#break-and-continue-labels:
loop@ while (...) {
when (itemType) {
1 -> continue@loop
else -> break@loop
}
}