Android kotlin中的操作符 ::(引用)
·
前言,最近在学习room数据库时出现了,::的引用,所以就学习了一下为什么要用::,如果正常的使用操作符 . 来访问不行吗,有什么区别?
首先说一下::能引用啥
1.引用函数
fun greet(name: String) {
println("Hello, $name!")
}
fun main() {
val greeter = ::greet // 引用 greet 函数
greeter("Alice") // 调用 greet 函数
}
2.引用类的构造函数
class Person(val name: String)
fun main() {
val createPerson = ::Person // 引用构造函数
val person = createPerson("John") // 创建一个 Person 对象
println(person.name)
}
3. 引用属性
class Person(val name: String, val age: Int)
fun main() {
val person = Person("Alice", 30)
val nameReference = Person::name // 引用 name 属性
println(nameReference.get(person)) // 输出 "Alice"
}
4. 引用伴生对象
class MyClass {
companion object {
fun hello() {
println("Hello from companion object!")
}
}
}
fun main() {
val helloRef = MyClass.Companion::hello // 引用伴生对象的函数
helloRef() // 调用 hello 函数
}
5. 引用接口的实现方法
interface Printer {
fun printMessage(message: String)
}
class ConsolePrinter : Printer {
override fun printMessage(message: String) {
println(message)
}
}
fun main() {
val printer = ConsolePrinter()
val printRef = printer::printMessage // 引用方法
printRef("Hello Kotlin!") // 调用 printMessage 方法
}
总结
:: 并不是为了代替直接访问属性或方法,而是提供了一种更强大、灵活的方式来引用、传递和操作函数、类、构造函数和属性,尤其在以下情况下特别有用:
-
高阶函数:传递函数作为参数。
-
反射:动态地操作函数和属性。
-
属性引用:引用类的属性,尤其在数据绑定等场景中非常有用。
-
构造函数引用:允许动态创建对象。
直接访问是简洁的,但 :: 提供了更多的灵活性,特别是在复杂和动态的编程场景中。
ok以上其实是AI给我的解释,看的时候还是能够大概理解::这个操作符,还有一些简单用法,其实也就是为了代码更简洁更高级和安全一点,把对象或者函数之间"赋值"给另一个变量,然后可以随意去操作这个变量,也是挺方便的
然后其实这就让我联想到c++的引用,诶?这不是和c++的引用差不多嘛,其实就是给一个对象起别名,然后后面可以用别名来访问这个对象,其实为了简单理解我个人觉得也可以这么来理解,但是具体的话还是有点区别的
1、比如c++的引用是可以改变值的,加入&b=a ,b=10,这样的操作可行的,但是kotlin的::不行,他不能够赋值
2、C++ 的引用让你通过新的别名直接操作变量的值,相当于对原始对象的“引用”。Kotlin 的 :: 并不是创建变量的别名,而是用来创建对方法、属性、构造函数等的引用,从而可以将它们传递给高阶函数或用于反射等动态操作。
此文到此结束,这只是我一个小小的知识点记录,希望可以帮到你
更多推荐
所有评论(0)