当前位置: 首页 > article >正文

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
}

http://www.kler.cn/a/455830.html

相关文章:

  • Web身份认证 --- Session和JWT Token
  • Python爬虫:爱奇艺榜单数据的实时监控
  • No.1免费开源ERP:Odoo自定义字段添加到配置页中的技术分享
  • 华为仓颉编程语言的应用案例分析
  • 深入解析MVCC中Undo Log版本底层存储读取逻辑
  • [实战]Spring Boot启动卡在Root WebApplicationContext initialization completed in
  • rust windwos 两个edit框
  • 矩阵线性方程组
  • js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
  • React vite + less
  • 云原生架构中的中间件容器化:优劣势与实践探索
  • PHP技术全栈开发秘籍:从基础到实战的进阶之旅
  • 深度学习驱动的油气开发技术与应用
  • .NET平台用C#通过字节流动态操作Excel文件
  • JVM - JVM调优
  • BFS中的多源BFS、最小步数模型和双端队列广搜
  • HarmonyOS NEXT 实战之元服务:静态案例效果---教育培训服务
  • MacOS下TestHubo安装配置指南
  • Ubuntu24.04最新版本安装详细教程
  • “拍卖信息化”:网上拍卖系统的未来发展