如何在使用Kotlin的`while`循环中的`when`语句中继续或断开

我正在把一个大项目转换成Kotlin。 有许多挑战。 我学习Kotlin的新模式就是其中之一。 希望有一个模式,我可以用来解决这个问题。

这是我试图实现的代码。 但是,在when语句中, continuebreak是无效的。

 while (!mStopped && c.moveToNext()) { val itemType = c.getInt() when (itemType) { 1, 2 -> { doSomething() if (condition) continue doSomethingElse() } } doTheLastStuff() } 

这是一个非常简化的代码版本。 原来的java代码在switch语句中有100行代码,并且有很多continuebreak

我正在努力实现的是在while语句中继续执行。 在Kotlin中做什么的模式是什么?

这里的问题是,在一个when语句中, breakcontinue有一个特殊的含义,即断开和继续的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 @是有效标签(…)用标签限定的分隔符在标有该标签的循环之后跳转到执行点。 继续进行到该循环的下一个迭代。