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
}
相关推荐
独自破碎E几秒前
【BISHI9】田忌赛马
android·java·开发语言
范纹杉想快点毕业6 分钟前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
咖丨喱7 分钟前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子20 分钟前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划
smileNicky32 分钟前
布隆过滤器怎么提高误差率
java
それども35 分钟前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
fengfuyao9851 小时前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
Java面试题总结1 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
机器学习之心1 小时前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
一只小小的芙厨1 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划