我正在将一个大型项目转换为Kotlin.有许多挑战.我学习Kotlin的新模式就是其中之一.希望我可以使用一种模式来解决这个问题.
这是我试图实现的代码.但是,continue
并且break
在when
声明中无效.
while (!mStopped && c.moveToNext()) {
val itemType = c.getInt()
when (itemType) {
1, 2 -> {
doSomething()
if (condition)
continue
doSomethingElse()
}
}
doTheLastStuff()
}
Run Code Online (Sandbox Code Playgroud)
这是代码的一个非常简化的版本.原始的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()
}
Run Code Online (Sandbox Code Playgroud)
以下是文档的相关摘录:
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1215 次 |
最近记录: |