我们知道在 Kotlin 中使用双冒号 (::
) 来获取函数(可调用)引用,例如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 Class 类,你可以编写 Object::class.java
- 即:
println("string"::class.java)
同样在 java 中,.class
不是方法或成员——它是编译器访问类的特殊指令。
我猜每种语言都会选择最适合它的语法,而 kotlin 的创造者决定使用 ::
https://stackoverflow.com/questions/45339034/