Kotlin中的::操作符详解

发布于:2025-05-31 ⋅ 阅读:(18) ⋅ 点赞:(0)

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 > 10

val 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::name

fun main() {
    println(getName())
}

在这里插入图片描述

底层原理简述

val func = String::length

fun main(){
    println(func("Hello"))
}

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到