java - 为什么使用双冒号 (::) 在 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

最佳答案

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

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

https://stackoverflow.com/questions/45339034/

相关文章:

android - 实时模板在 Kotlin 中不起作用

arrays - Kotlin - 检查数组是否包含值的惯用方法

Kotlin - 等待函数

java - 在 IntelliJ IDEA : "No MessageCollector" 中编译

android - 将项目添加到 LiveData 列表时通知观察者

kotlin - 将列表分成几部分

android - 如何使用 Kotlin 设置 OnEditorActionListener

android - 具有初始值的 MutableLiveData

android - 如何在 RecyclerView.ViewHolder 中使用 kotlin 绑

android - 运算符 == 不能应用于 Kotlin 中的 'Long' 和 'Int'