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
}
相关推荐
xmjd msup15 分钟前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
纽扣66726 分钟前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
9523640 分钟前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.43 分钟前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-194344 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心12211 小时前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px1 小时前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋
智者知已应修善业1 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
rleS IONS1 小时前
SpringBoot中自定义Starter
java·spring boot·后端
苍煜2 小时前
慢SQL优化实战教学
java·数据库·sql