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
}
相关推荐
魔镜魔镜_谁是世界上最漂亮的小仙女5 分钟前
java-集合
java·后端·程序员
真实的菜6 分钟前
消息队列高级特性与原理:解锁分布式系统的底层逻辑
java
若水不如远方8 分钟前
java范型
java
凌辰揽月10 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
lifallen16 分钟前
深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
java·开发语言·数据结构·算法·排序算法
jingfeng51416 分钟前
数据结构排序
数据结构·算法·排序算法
长安不见18 分钟前
背景知识: 理解LimitLatch背后的AQS
java
小吕学编程20 分钟前
策略模式实战:Spring中动态选择商品处理策略的实现
java·开发语言·设计模式
weixin_4383354026 分钟前
Spring Boot实现接口时间戳鉴权
java·spring boot·后端
能工智人小辰42 分钟前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法