Kotlin 开发 - 双冒号操作符(引用顶层函数、引用成员函数、引用构造函数、引用属性、引用类)

双冒号操作符

1、引用顶层函数
  • 直接引用 ::【函数名】
kotlin 复制代码
fun isOdd(x: Int) = x % 2 != 0

val numbers = listOf(1, 2, 3)

val oddNumbers = numbers.filter(::isOdd)

println(oddNumbers)
kotlin 复制代码
// 等价于

fun isOdd(x: Int) = x % 2 != 0

val numbers = listOf(1, 2, 3)

val oddNumbers = numbers.filter { isOdd(it) }

println(oddNumbers)
2、引用成员函数
  1. 未绑定引用 【类名】::【成员函数】
kotlin 复制代码
val list = listOf("a", "bb", "ccc")

val lengths = list.map(String::length)

println(lengths)
kotlin 复制代码
// 等价于

val list = listOf("a", "bb", "ccc")

val lengths = list.map { it.length }

println(lengths)
kotlin 复制代码
data class Person(val name: String, val age: Int)

val list = listOf(Person("Alice", 25), Person("Bob", 30))

val names = list.map(Person::name)

println(names)
kotlin 复制代码
// 等价于

data class Person(val name: String, val age: Int)

val list = listOf(Person("Alice", 25), Person("Bob", 30))

val names = list.map { it.name }

println(names)
  1. 已绑定引用 【对象实例】::【成员函数】
kotlin 复制代码
data class Person(val name: String, val age: Int)

val p = Person("Alice", 25)

val nameGetter = p::name

println(nameGetter())
3、引用构造函数
kotlin 复制代码
data class Person(val name: String, val age: Int)

val createPerson = ::Person

val p = createPerson("Alice", 25)

println(p)
4、引用属性
kotlin 复制代码
var count = 0

fun main() {
    val countProperty = ::count

    println(countProperty.get())

    countProperty.set(5)

    println(count)
}
  • 对于局部变量,Kotlin 编译器不支持生成可修改的属性引用,只能生成只读的引用
kotlin 复制代码
fun main() {
    var count = 0

    val countProperty = ::count

    println(countProperty.get())

    countProperty.set(5)

    println(count)
}
复制代码
# 输出结果

Unresolved reference 'set'.
5、引用类
kotlin 复制代码
data class Person(val name: String, val age: Int)

val kClass: KClass<Person> = Person::class

println(kClass.simpleName)
相关推荐
guodingdingh22 分钟前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯2 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
GitLqr2 小时前
Flutter 无障碍开发实战:玩转 Semantics 解决视障用户使用痛点
android·flutter·dart
糖果店的幽灵2 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔4 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel4 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code5 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121315 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言