Kotlin setOnclickListener

回到java中,我曾经写过只return一个无效的方法…但kotlin似乎不允许只是返回,而是使用return@methodname ? 有人可以解释这是什么,它是如何增加价值?

  bAddLine.setOnClickListener { val selectedSeries = getSelectedSeries() if (selectedSeries.isEmpty()) { Toast.makeText(this, getString(R.string.toast_channel_mandatory), Toast.LENGTH_LONG).show() return@setOnClickListener } } 

来自kotlinlang网站:

在标签处返回

通过函数文字,本地函数和对象表达,函数可以嵌套在Kotlin中。 合格的回报允许我们从外部函数返回。 最重要的用例是从lambda表达式返回。 回想一下,当我们写这个:

 fun foo() { ints.forEach { if (it == 0) return // nonlocal return from inside lambda directly to the caller of foo() print(it) } } 

return -expression从最近的封闭函数(即foo)返回。 (请注意,只有传递给内联函数的lambda表达式才支持这种非本地返回。)如果我们需要从lambda表达式返回,则必须标记它并限定return

 fun foo() { ints.forEach lit@ { if (it == 0) return@lit print(it) } } 

现在,它只从lambda表达式返回。 通常情况下,使用隐含标签更为方便:这样的标签与lambda传递的函数具有相同的名称。

 fun foo() { ints.forEach { if (it == 0) return@forEach print(it) } } 

当在lambda中时,你必须指定你希望return范围,因为它可能是不明确的。 查看有关退回标签的官方文档。

在这个特定的情况下,如果你要返回一个不返回任何东西的函数的末尾,你可以完全省略return语句。