为什么使用双冒号(::)在Kotlin上课?
我们知道使用双冒号( ::
:)来获取Kotlin中的函数(callable)引用,例如String::compareTo
, "string"::compareTo
。
在Java中,我们使用SomeClass.class
和someInstance.getClass()
来获得类。 为什么在Kotlin中,我们使用SomeClass::class
和someInstance::class
而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
在Kotlin中,你可以编写Object::class
,它会给你一个KClass。 KClass不等同于我们从Java所了解的类Class。 如果你想获得Java类的类,你可以编写Object::class.java
– 即: println("string"::class.java)
在java中, .class
不是一个方法或成员 – 它是编译器访问类的特殊指令。 我猜每种语言都会选择对其最有意义的语法,而kotlin的创建者决定使用::