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

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.xdnf.cn/news/717481.html

相关文章:

  • Android 之 kotlin 语言学习笔记二(编码标准)
  • 【DeepSeek 部署中的常见问题及解决方案】
  • [解决]在 Vue 3 使用 Vite 开发的项目中,放在 public 文件夹里的文件,在打包部署后出现 404 的问题
  • python学习打卡day39
  • IO Vs NIO
  • Sqlalchemy 连mssql坑
  • 三维可视化和实时数据处理对前端性能要求以及优化渲染效率
  • Ubuntu 和 Linux 命令行是高度通用的
  • pom.xml 文件中配置你项目中的外部 jar 包打包方式
  • 《100天精通Python——基础篇 2025 第22天:Python 多进程编程入门与实战详解》
  • 09《从依赖管理到容器化部署:Maven 全链路实战笔记,解锁 Java 项目自动化构建的终极奥秘》
  • Cancer Cell丨肺癌早期干预新突破,TIM-3靶点或成关键
  • 【Phytium】飞腾FT2000/4 GPIO功能开发实例【待完成】
  • 变量的计算
  • HarmonyOS开发:Image使用详解
  • 大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
  • burpsuit抓包完整示例
  • Python基础教程:控制流与函数入门 - 第4-6天
  • Vue的生命周期
  • 技术栈ES的介绍和使用
  • java每日精进 5.29【请求限流】
  • 7-Zip 工具使用
  • How to Initiate Back-to-Back Write Transactions from Master
  • DMBOK对比知识点整理(4)
  • 力扣HOT100之动态规划:118. 杨辉三角
  • 今日分享:怎么综合分析5星股票?
  • 【Unity博客节选】Playable Graph Monitor 安装使用
  • 安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全
  • Accelerate实现多卡并行训练
  • Nexus仓库数据高可用备份与恢复方案(上)