当前位置: 首页 > 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
}

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

相关文章:

  • Kotlin 中集合遍历有哪几种方式?
  • Kotlin委托机制使用方式和原理
  • 再见Notepad++,你好Notepad--
  • MATLAB语言教程:从入门到精通的全面指南
  • 【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解
  • ES中must与filter的区别
  • Elasticsearch的集群管理介绍
  • ElasticSearch简介及常用操作指南
  • django项目开启debug页面操作有数据操作记录
  • Starrocks 物化视图的实现以及在刷新期间能否读数据
  • 记一次 Starrocks be 内存异常宕机
  • R语言在生物群落数据统计分析与绘图中的实践应用
  • 拉取gitlab项目
  • 零基础设计模式——结构型模式 - 代理模式
  • YOLO12改进-模块-引入AFE模块 增强模型对复杂场景(如杂乱背景、小目标、半透明物体)的特征提取能力
  • python2解决反编译乱码
  • 数值计算与数据相关参数剖析:保障模型训练稳定与准确
  • Selenium基础操作方法详解
  • 题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
  • 【仿生系统】爱丽丝机器人的设想(可行性优先级较高)
  • 德州做网站dzqifan/中国十大网络销售公司
  • 网站建设开发软件有哪些/电子商务主要学什么
  • 原材料价格查询网站/资源网站优化排名软件公司
  • 太原贴吧/甘肃省seo关键词优化
  • 医疗网站建设行业现状和影响/培训机构
  • php网站建设设计制作方案/上海网络营销公司