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

fik*_*r4n 31 java operators kotlin

我们知道,双冒号(::)用于获取在科特林,如功能(可赎回)的参考String::compareTo,"string"::compareTo.

在Java中,我们使用SomeClass.classsomeInstance.getClass()获取类.为什么在Kotlin我们使用SomeClass::classsomeInstance::classwhile class不是函数/方法?

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
Run Code Online (Sandbox Code Playgroud)

Lio*_*-On 28

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

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


Mih*_*x64 14

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