You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何无需Lambda将方法加入listOf?为何直接引用报错?

问题解答

报错原因

直接写tasks.hide时,Kotlin编译器会默认把它当成无参数方法的调用——Kotlin允许无参方法省略括号执行,所以编译器觉得你是想调用hide()却漏写了括号,才抛出“function invocation 'hide()' expected”错误。它根本没把hide当成函数引用,而是当成了方法调用的简写。

不用Lambda实现函数引用的方法

完全可以像C++函数指针那样直接存方法引用,只要用Kotlin的::操作符明确获取函数引用就行。

假设你的Tasks object是这么定义的:

object Tasks {
    fun hide() { println("Hide") }
    fun show() { println("Show") }
    fun exit() { println("Exit") }
}

直接用::拿方法引用塞进listOf:

val actions = listOf(
    Tasks::hide,
    Tasks::show,
    Tasks::exit
)

这时候actions的类型是List<() -> Unit>,和用Lambda的方式完全一致,调用的时候直接执行就行:

actions[0]() // 执行hide方法

额外说明

  • 如果是在Tasks内部引用自身方法,直接写::hide、::show就行,不用加Tasks::前缀。
  • ::是Kotlin里获取函数、属性引用的标准操作符,它返回的Function对象本质和Lambda等价,但写法更简洁,也更贴近你想要的“函数指针”效果。

内容的提问来源于stack exchange,提问作者HumanPeople

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:40:39