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

我们知道使用双冒号( :: :)来获取Kotlin中的函数(callable)引用,例如String::compareTo"string"::compareTo

在Java中,我们使用SomeClass.classsomeInstance.getClass()来获得类。 为什么在Kotlin中,我们使用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 

在Kotlin中,你可以编写Object::class ,它会给你一个KClass。 KClass不等同于我们从Java所了解的类Class。 如果你想获得Java类的类,你可以编写Object::class.java – 即: println("string"::class.java)

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