- 在Kotlin中任何表达式都可以用标签(label)来标记。标签的格式为标识符后加@符号,比如 abc@ ,_OK@。我们可以用label来控制return、break、continue语句的跳转行为。
代码示例如下:
val intArray = intArrayOf(1, 2, 3, 4, 5)
intArray.forEach here@{
if (it == 3)
return@here
println(it)
}
控制台输出如下
here@可以这么理解:该标签记录了Lambda表达式的入口地址,然后在表达式内部使用return@here跳转至Lambda表达式中的该地址处。也可以使用隐式标签代码如下。
val intArray = intArrayOf(1, 2, 3, 4, 5)
intArray.forEach{
if (it == 3)
return@forEach
println(it)
}
输出结果和上面的一致。
- throw
在kotlin中throw是表达式,它的类型是特殊类型Nothing。该类型没有值,与java中void意思一样
在代码中:Nothing代表无返回函数
private fun testThrow(msg: String): Nothing {
throw IllegalArgumentException(msg)
}
调用会抛异常
Exception in thread "main" java.lang.IllegalArgumentException: test
at com.demo.kotlin.Text.testThrow(Text.kt:72)
at com.demo.kotlin.Text.main(Text.kt:77)
如果想要把一个throw表达式赋值给一个变量,需要显示声明类型为Nothing,否则会报错
val no: Nothing = throw Exception("test")
因为no变量是Nothing类型,没有任何值,所以无法作为参数传给函数。