我正在将一个大型项目转换为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这样做的模式是什么?
您可以使用标签继续/打破循环,即:
myLoop@ while (!mStopped && c.hasNext()) { val itemType = c.next() when (itemType) { 1, 2 -> { doSomething() if (condition()) continue@myLoop doSomethingElse() } } doTheLastStuff() }
以下是文档的相关摘录:
Kotlin中的任何表达都可以用标签标记.标签的形式为标识符,后跟@符号,例如:abc @,fooBar @是有效标签(...)使用标签限定的中断在标有该标签的循环后立即跳转到执行点.继续进行到该循环的下一次迭代.
这里的问题是,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 } }