kotlin 函数作为参数

函数引用的类型

Kotlin 支持几种类型的函数引用:

  • 引用顶层函数: ::topLevelFunction
  • 引用成员函数: ::memberFunction (需要一个对象实例来调用)
  • 引用扩展函数: ::extensionFunction (需要一个接收者对象)
  • 引用构造函数: ::ClassName 或 ClassName::class.constructors.first() (对于特定的构造函数)
  • 引用属性: ::propertyName (可以是 val 或 var)
  • 引用绑定成员引用: 使用 object : SomeInterface { ... }::someMethod 的形式,创建一个绑定到特定对象实例的成员函数引用. 这在需要引用特定对象实例的成员函数时很有用,即使该对象实例在创建函数引用后可能会更改。

如何创建函数引用

使用 :: 运算符后跟函数或属性的名称来创建函数引用。

示例

复制代码
fun topLevelFunction(x: Int, y: Int): Int = x + y

class MyClass {
    fun memberFunction(s: String): Int = s.length

    fun double(x: Int): Int = x * 2
}

fun String.extensionFunction(): Int = this.length

val myProperty: Int = 42

fun main() {
    // 引用顶层函数
    val sum: (Int, Int) -> Int = ::topLevelFunction
    println(sum(1, 2)) // 输出 3

    // 引用成员函数
    val obj = MyClass()
    val length: (String) -> Int = obj::memberFunction
    println(length("hello")) // 输出 5

    // 引用扩展函数
    val extLength: String.() -> Int = String::extensionFunction
    println("world".extLength()) // 输出 5

    // 引用构造函数
    val createMyClass: () -> MyClass = ::MyClass
    val newObj = createMyClass()

    // 引用属性
    val getProperty: () -> Int = ::myProperty
    println(getProperty()) // 输出 42


    // 引用绑定成员引用
    val doubleFunction: (Int) -> Int = obj::double // 绑定到 obj 实例
    println(doubleFunction(5)) // 输出 10
}
相关推荐
程序员黑豆20 分钟前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
致Great1 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
mldong4 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路4 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding5 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
zww89491115 小时前
校园跑腿系统开发实战指南:从需求分析到上线部署全流程解析
java
Fluxart.ai6 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
罗西的思考6 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
民乐团扒谱机6 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
名字还没想好☜6 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏