【发布时间】:2018-01-02 11:44:41
【问题描述】:
我们知道双冒号 (::) 用于在 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 中的 reflect(class, method, field),而不是 java 中的方法引用。
-
谢谢,这是我对documentation 的误解。我认为它是可调用的参考,因为
val f: () -> CharArray = ""::toCharArray是有效的。 -
@Miha_x64 的答案就是答案,谢谢;正如我问“为什么”而不是“如何”