Nous savons que les deux points (::
) Sont utilisés pour obtenir la référence de la fonction (appelable) dans Kotlin, par ex. String::compareTo
, "string"::compareTo
.
Dans Java nous utilisons SomeClass.class
Et someInstance.getClass()
pour obtenir la classe. Pourquoi dans Kotlin nous utilisons SomeClass::class
Et someInstance::class
tandis que class
n'est pas une fonction/méthode?
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
::
dans Kotlin concerne la méta-programmation, y compris les références de méthode, les références de propriété et les littéraux de classe. Voir discussion sur les littéraux de classe .
Dans Kotlin, vous pouvez écrire Object::class
, ce qui vous donnera KClass
. KClass n'est pas équivalent à la classe Class que nous connaissons de Java. Si vous voulez obtenir la classe Java Class, vous pouvez écrire Object::class.Java
- c'est-à-dire: println("string"::class.Java)
Également en Java, .class
N'est pas une méthode ou un membre - c'est une directive spéciale pour que le compilateur accède à la classe. Je suppose que chaque langue sélectionne la syntaxe qui a le plus de sens pour elle, et les créateurs de kotlin ont décidé d'utiliser ::