如何使用Kotlin在`while`循环内的`when`语句中`continue`或`break`

时间:2016-01-10 09:22:26

标签: kotlin

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

这是我试图实现的代码。但是,continuebreakwhen声明中无效。

while (!mStopped && c.moveToNext()) {

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

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

我想要实现的是继续执行while语句。在Kotlin中这样做的模式是什么

2 个答案:

答案 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)

这里的问题是breakcontinuewhen语句中具有特殊含义,即打破并继续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
    }
}