web-dev-qa-db-fra.com

Kotlin: équivalent de getClass () pour KClass

Dans Java nous pouvons résoudre la classe d'une variable par getClass() comme something.getClass(). Dans Kotlin, je suis conscient de something.javaClass qui est gentil mais je veux pouvoir obtenir le KClass de la même manière. J'ai vu le Something::class _ syntaxe mais ce n’est pas ce dont j’ai besoin. Je dois obtenir le KClass d'une variable. Une telle fonctionnalité existe-t-elle?

70
Jire

Le moyen le plus simple d’atteindre cet objectif depuis Kotlin 1.1 est le syntaxe de référence de classe :

something::class

Si vous utilisez Kotlin 1.0, vous pouvez convertir la classe Java) obtenue en une instance KClass en appelant le .kotlin propriété d'extension:

something.javaClass.kotlin
102
Alexander Udalov

EDIT: voir les commentaires ci-dessous et la réponse d'Alexandre ci-dessus. Ce conseil était à l'origine pour Kotlin 1.0 et il semble que ce soit maintenant obsolète.

Puisque le langage ne supporte pas encore de moyen direct pour l'obtenir, pensez à définir une méthode d'extension pour le moment .

fun<T: Any> T.getClass(): KClass<T> {
    return javaClass.kotlin
}

val test = 0
println("Kotlin type: ${test.getClass()}")

Ou, si vous préférez une propriété:

val<T: Any> T.kClass: KClass<T>
    get() = javaClass.kotlin

val test = 0
println("Kotlin type: ${test.kClass}")
11
dherman