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

Kotlin中的::操作符详解

Kotlin提供了::操作符,用于创建对类或对象的成员(函数、属性)的引用。这种机制叫做成员引用(Member Reference)。这是Kotlin高阶函数和函数式编程的重要组成部分。

简化函数传递

在Java中,我们这样传方法:

    list.forEach(item -> System.out.println(item));

而在Kotlin中,可以写成:

    val list = listOf("Apple","Banana","Cherry")list.forEach(::println)

::println 表示把 println 当作一个函数对象传进去,而不是调用它,就是一种函数引用。

常见用法分类

1.引用类的成员函数或属性

val length:(String) ->Int = String::length
val toUpperCase:(String) ->String = String::toUpperCase

等价于

val length:(String) -> Int = {it.length
}
val toUpperCase:(String) -> String = {it.toUpperCase()
}

2.引用构造函数

 class Person{
}
val createPerson: () -> Person = ::Person

等价于:

val createPerson: () -> Person = {Person()}

3.引用顶层函数

定义一个函数

fun sayHello(name:String){println("Hello,$name")
}

引用方式

val greet:(String) -> Unit = ::sayHello
fun main() {greet("Tom")
}

4.引用扩展函数

fun String.isLong() = this.length > 10val check:(String) -> Boolean = String::isLong

5.获取类的KClass对象(关键字class)

val clazz = String::class

这里与函数引用的::不同,获取的是类元信息

实际使用场景

作为高阶函数参数

data class User(val name: String)
val users = listOf(User("Alice"),User("Bob"))val names = users.map(User::name)
fun main() {println(names)
}

在这里插入图片描述

绑定实例方法

data class User(val name: String)
val users = User("Mike")
val getName: () -> String = users::namefun main() {println(getName())
}

在这里插入图片描述

底层原理简述

val func = String::lengthfun main(){println(func("Hello"))
}

kotlin编辑器会生成一个实现了相应函数接口的对象

val func = fun(s:String):Int = s.length
等价于
fun myFunction(s: String): Int {return s.length
}

这些引用在编译期就能被识别并优化

http://www.lryc.cn/news/2396834.html

相关文章:

  • 【Linux】(1)—进程概念-③Linux进程概念与PCB
  • 神经网络中的梯度消失与梯度爆炸
  • 深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
  • 系统架构设计师案例分析----经典架构风格特点
  • 基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
  • HTML实战:爱心图的实现
  • 定时任务:springboot集成xxl-job-core(二)
  • DeviceNET转EtherCAT网关:医院药房自动化的智能升级神经中枢
  • 一:UML类图
  • 数据库三范式的理解
  • Java 中 MySQL 索引深度解析:面试核心知识点与实战
  • DeepSeek 部署中的常见问题及解决方案
  • Nvidia Intern 笔试回忆
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • 设计模式之结构型:装饰器模式
  • mysql分布式教程
  • MySQL安装及启用详细教程(Windows版)
  • Vue3.5 企业级管理系统实战(二十一):菜单权限
  • kafka幂等生产者和事务生产者区别
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十九) -> 开发云数据库
  • 批量导出CAD属性块信息生成到excel——CAD C#二次开发(插件实现)
  • 可视化大屏如何制作
  • Goreplay最新版本的安装和简单使用
  • Android Studio 解决报错 not support JCEF 记录
  • SMT高速贴片机核心技术深度剖析
  • sigmastar实现SD卡升级
  • kafka学习笔记(三、消费者Consumer使用教程——配置参数大全及性能调优)
  • yarn、pnpm、npm
  • JVM——Truffle:语言实现框架
  • C++ STL vector容器详解:从原理到实践