Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在Kotlin中使用双冒号(:)获取类?_Java_Operators_Kotlin - Fatal编程技术网

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,我已经检查过了,它可以工作了。可能加载速度太慢(尤其是在移动网络上),或者您的互联网连接被审查/限制。