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)
相关推荐
亦暖筑序3 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
恋猫de小郭3 小时前
Amper 正式转正 Kotlin Toolchain ,Gradle 未来何去何从
android·前端·flutter
敲代码的彭于晏3 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev5 小时前
ButterKnife → ViewBinding
android·java·kotlin
成都大菠萝18 小时前
Android Car CarProperty 车辆信号链路
android
敲代码的鱼19 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
时光足迹20 小时前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
像我这样帅的人丶你还20 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩21 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia21 小时前
Mybatis的日志输入
java