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

Why getting class in Kotlin using double-colon (::)?

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

在Java中我们使用SomeClass.classsomeInstance.getClass()得到class。为什么在 Kotlin 中我们使用 SomeClass::classsomeInstance::classclass 不是 function/method?

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

在 Kotlin 中你可以写 Object::class, which will give you a KClass。 KClass不等同于我们从Java知道的classClass。 如果你想得到 Java Class class 你可以写 Object::class.java - 即: println("string"::class.java)

同样在 java 中,.class 不是方法或成员 - 它是编译器访问 class 的特殊指令。 我猜每种语言 select 最适合它的语法,kotlin 的创造者决定使用 ::

Kotlin中的

::是关于元编程的,包括方法引用、属性引用和class字面量。 参见 discussion about class literals