如何在使用Kotlin的`while`循环中的`when`语句中继续或断开
我正在把一个大项目转换成Kotlin。 有许多挑战。 我学习Kotlin的新模式就是其中之一。 希望有一个模式,我可以用来解决这个问题。
这是我试图实现的代码。 但是,在when
语句中, continue
和break
是无效的。
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中做什么的模式是什么?
这里的问题是,在一个when
语句中, break
和continue
有一个特殊的含义,即断开和继续的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 } }
您可以使用标签继续/打破循环,即:
myLoop@ while (!mStopped && c.hasNext()) { val itemType = c.next() when (itemType) { 1, 2 -> { doSomething() if (condition()) continue@myLoop doSomethingElse() } } doTheLastStuff() }
以下是文档的相关摘录:
Kotlin中的任何表达都可能标有标签。 标签具有标识符后跟@符号的形式,例如:abc @,fooBar @是有效标签(…)用标签限定的分隔符在标有该标签的循环之后跳转到执行点。 继续进行到该循环的下一个迭代。