为什么在 Kotlin 中使用双冒号 (::)?

2022-08-31 23:39:16

我们知道双冒号 () 用于在 Kotlin 中获取函数(可调用)引用,例如 , .::String::compareTo"string"::compareTo

在Java中,我们使用和来获取类。为什么在 Kotlin 中我们使用 and while 不是一个函数/方法?SomeClass.classsomeInstance.getClass()SomeClass::classsomeInstance::classclass

println(String::compareTo)
// output: fun kotlin.String.compareTo(kotlin.String): kotlin.Int
println("string".compareTo("strong"))
// output: -6
println(String::class)
// output: class kotlin.String
println("string".class)
// compile error

答案 1

在 Kotlin 中,你可以编写 Object::class,这将给你一个 KClass。KClass 并不等同于我们从 Java 中知道的类 Class。如果你想得到Java类,你可以写 - 即:Object::class.javaprintln("string"::class.java)

同样在java中,它不是方法或成员 - 它是编译器访问类的特殊指令。我想每种语言都选择对它最有意义的语法,kotlin的创建者决定使用.class::


答案 2

::在Kotlin中是关于元编程的,包括方法引用,属性引用和类文本。请参阅有关类文本的讨论