web-dev-qa-db-fra.com

Pourquoi obtenir des cours à Kotlin en utilisant les deux-points (: :)?

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
26
fikr4n

:: 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 .

4
Miha_x64

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 ::

24
Lior Bar-On