Scope functions | Kotlin Documentation (kotlinlang.org)
val numbers = mutableListOf("one", "two", "three", "four", "five")
numbers.map { it.length }.filter { it > 3 }.let(::println)
在 Kotlin 中,::
是一个反射操作符,用来引用类的成员(属性或方法)或者类本身。这个操作符的使用可以分为几个不同的场景:
-
函数引用:
使用::
可以把函数当作一个值来对待。这样,你可以将函数作为参数传递,或者将其赋值给变量。例如:
fun isPositive(x: Int) = x > 0 val numbers = listOf(-1, 0, 2) val positives = numbers.filter(::isPositive) // 这里 ::isPositive 是函数引用
-
属性引用:
类似于函数引用,属性引用让你可以把属性当作值来对待。例如:
var x = 1 val prop = ::x // 引用变量 x println(prop.get()) // 输出 1 prop.set(2) // 将 x 的值设置为 2 println(x) // 输出 2
-
构造函数引用:
你可以通过构造函数引用来创建对应类的实例。例如:
class Person(val name: String) val personConstructor = ::Person val p = personConstructor("Alice") // 创建一个 Person 实例 println(p.name) // 输出 Alice
-
类引用:
当你需要获取类的元数据时,可以使用类引用。例如:
val c = Person::class // 获取 Person 类的 KClass 对象
::
操作符在 Kotlin 中是非常有用的,尤其是在需要将方法作为参数传递或者操作属性作为对象时。反射操作通常会带来一些性能开销,但 Kotlin 设计了一套机制来尽可能地减少这种开销。在实际使用中,你应当根据具体情况来权衡是否使用反射功能。