kotlin 函数作为参数

ops/2024/12/27 5:15:50/

函数引用的类型

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

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

如何创建函数引用

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

示例

fun topLevelFunction(x: Int, y: Int): Int = x + yclass MyClass {fun memberFunction(s: String): Int = s.lengthfun double(x: Int): Int = x * 2
}fun String.extensionFunction(): Int = this.lengthval myProperty: Int = 42fun main() {// 引用顶层函数val sum: (Int, Int) -> Int = ::topLevelFunctionprintln(sum(1, 2)) // 输出 3// 引用成员函数val obj = MyClass()val length: (String) -> Int = obj::memberFunctionprintln(length("hello")) // 输出 5// 引用扩展函数val extLength: String.() -> Int = String::extensionFunctionprintln("world".extLength()) // 输出 5// 引用构造函数val createMyClass: () -> MyClass = ::MyClassval newObj = createMyClass()// 引用属性val getProperty: () -> Int = ::myPropertyprintln(getProperty()) // 输出 42// 引用绑定成员引用val doubleFunction: (Int) -> Int = obj::double // 绑定到 obj 实例println(doubleFunction(5)) // 输出 10
}

http://www.ppmy.cn/ops/145293.html

相关文章

Elasticsearch-脚本查询

脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性…

面试题整理17----K8s中request和limit资源限制是如何实现的

面试题整理17----K8s中request和limit资源限制是如何实现的 1. 资源请求(Resource Requests)2. 资源限制(Resource Limits)3. 总结 在Kubernetes(K8s)中,Pod的资源限制(Resource Lim…

新能源汽车锂离子电池各参数的时间序列关系

Hi,大家好,我是半亩花海。为了进一步开展新能源汽车锂离子电池的相关研究,本文主要汇总并介绍了电动汽车的锂离子电池的各项参数,通过 MATLAB 软件对 Oxford Dataset 的相关数据集进行数据处理与分析,进一步研究各项参…

构建安全的用户认证系统:PHP实现

构建安全的用户认证系统:PHP实现 用户认证是任何Web应用的重要组成部分,确保只有授权用户才能访问特定资源。构建一个安全的用户认证系统需要考虑多种因素,包括密码存储、会话管理和防止常见gongji。本文将介绍如何使用PHP实现一个安全的用户…

纯Dart Flutter库适配HarmonyOS

纯Dart Flutter库适配HarmonyOS介绍: Flutter基本组件、Flutter布局组件、Flutter图片组件、Flutter字体、Flutter图标、Fluter路由、flutter动画、 Flutter表单、flutter异步等,纯Dart库无需任何处理,可以直接编译成HarmonyOs应用。 具体步…

.NET重点

B/S C/S B/S: 浏览器端:JavaScript,HTML,CSS 服务器端:ASP(.NET)PHP/JSP 优势:维护方便,易于升级和扩展 劣势:服务器负担沉重 C/S java/.NET/VC系列 …

Android笔试面试题AI答之Android基础(3)

文章目录 1.谈一谈 Android 的安全机制一、系统架构层面的安全设计二、核心安全机制三、其他安全机制与措施 2.Android 的四大组件是哪四大?3.Android 的四大组件都需要在清单文件中注册吗?4.介绍几个常用的Linux命令一、文件和目录管理二、用户和权限管…

【GD32】从零开始学GD32单片机 | DAC数模转换器 + 三角波输出例程

目录 简介输出缓冲外部触发数据转换噪声波LSFR噪声模式三角噪声模式 例程 简介 上一篇讲解了ADC的使用,所以这一篇讲DAC的使用,两者其实就是互补的关系,ADC将模拟信号转为数字信号,而DAC将数字信号转为模拟信号。具体的使用上DAC…