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

时间:2017-07-26 23:34:03

标签: java operators kotlin

我们知道双冒号(::)用于获取Kotlin中的函数(可调用)引用,例如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

2 个答案:

答案 0 :(得分:24)

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

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

答案 1 :(得分:4)

Kotlin中的

::是关于元编程的,包括方法引用,属性引用和类文字。 请参阅discussion about class literals