En Java, nous pouvons résoudre la classe d'une variable via getClass()
like something.getClass()
. À Kotlin, je sais something.javaClass
ce qui est bien, mais je veux pouvoir l'obtenir de la KClass
même manière. J'ai vu la Something::class
syntaxe mais ce n'est pas ce dont j'ai besoin. J'ai besoin d'obtenir la KClass d'une variable. Une telle fonctionnalité existe-t-elle?
93
javap
)KClass::class
pour obtenir l'objet de classe actuel.something::class
revientKClass<out Something>
pendant lesomething.javaClass.kotlin
retourKClass<Something>
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 maintenant obsolète.
Étant donné que le langage ne prend pas encore en charge un moyen direct pour obtenir cela, envisagez de 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}")
la source
java
bit et aller tout droit Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Voici ma solution
val TAG = javaClass.simpleName
Avec javaClass.simpleName, vous pouvez obtenir votre nom de classe. De plus, l'exemple ci-dessus est très utile pour les développeurs Android à déclarer en haut de la classe en tant que variable d'instance à des fins de journalisation.
la source
Voici différentes implémentations pour obtenir les noms de classe. Vous pouvez l'utiliser selon vos besoins.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }
Ici, nous pouvons obtenir le nom de la classe en kotlin
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }
Ici, nous pouvons obtenir le nom de la classe en kotlin
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }
Voici les sorties des opérations suivantes.
fun main(){ val userAge = 0 println(userAge.kClassName) Output: class java.lang.Integer (Kotlin reflection is not available) println(userAge.classNameKotlin) Output: Int println(userAge.classNameJava) Output: Integer }
la source