是的,return@OnClickListener 是 Kotlin 特有的写法,用于从一个 lambda 表达式中非本地返回(非局部 return),回到指定的标签或接收者中,而不是直接返回上层函数。
例子:
val listener = View.OnClickListener { v ->
val vId = v.id
val daArea = if (vId == R.id.ad_video_title) {
"title"
} else if (vId == R.id.ad_author_avatar || vId == R.id.ad_author_avatar_txt) {
"icon"
} else if (vId == R.id.ad_author_name) {
"name"
} else {
// 点击其他位置不做处理
return@OnClickListener // 👈 这里是关键
}
...
}return@OnClickListener的意思是:
告诉 Kotlin:
“我不是要从initClickListener()函数返回,而是只是退出这个OnClickListener的 lambda 表达式”。
为什么不直接写return呢?
因为在 Kotlin 中,如果你直接写return,会尝试从外围函数(这里是initClickListener())直接返回,这通常不是你想要的行为。比如这样会报错:
// ❌ 错误的写法:val listener = View.OnClickListener { return// 这会尝试返回 initClickListener()
}类似的写法:
list.forEach { if (it == 3) return@forEach// 只跳出 forEach 中当前 lambda 的执行
}总结
return@xxx是 Kotlin 的 限定返回(labeled return) 写法。- 它常用于在 lambda 表达式 或 匿名函数 中“跳出当前 lambda”,而不是整个外围函数。
- 在这段代码中,
return@OnClickListener的含义是“点击其他无效区域,忽略这次点击,不执行后续逻辑”。
更新: 2025-12-30 10:11:25
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/uypmnpmrzn4kogy4