Java 为什么在Kotlin中使用双冒号(:)获取类?
我们知道双冒号(Java 为什么在Kotlin中使用双冒号(:)获取类?,java,operators,kotlin,Java,Operators,Kotlin,我们知道双冒号(:)用于获取Kotlin中的函数(可调用)引用,例如String::compareTo,“String”::compareTo 在Java中,我们使用SomeClass.class和someInstance.getClass()来获取类。为什么在Kotlin中我们使用SomeClass::class和someInstance::class,而class不是函数/方法 println(String::compareTo) // output: fun kotlin.String.c
:
)用于获取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
在科特林,你可以写作,这会给你一个好印象。KClass并不等同于我们从Java中了解到的类。
如果您想获得Java类,可以编写Object::Class.Java
——即:
println(“字符串”::class.java)
同样在java中,.class
不是方法或成员-它是编译器访问类的特殊指令。
我猜每种语言都选择了最有意义的语法,kotlin的创建者决定在kotlin中使用
:
::
是关于元编程的,包括方法引用、属性引用和类文本。
请参阅。双冒号在kotlin中代表reflect(类、方法、字段),而不是java中的方法引用。谢谢,这是我从一开始就误解的。我认为它是可调用的引用,因为
val f:()->CharArray=“”::toCharArray
是有效的。@Miha_x64的答案就是答案,谢谢;当我问“为什么”而不是“如何”时,为什么语言没有实现getKClass()?相应地,getJavaClass()???!也许他们不想受到Java的影响:)这并不能回答“为什么”链接断开的问题。@Daniel,我已经检查过了,它可以工作了。可能加载速度太慢(尤其是在移动网络上),或者您的互联网连接被审查/限制。