En Java podemos resolver la clase de una variable mediante getClass()like something.getClass(). En Kotlin soy consciente de something.javaClassque está bien, pero quiero poder obtenerlo KClassde una manera similar. He visto la Something::classsintaxis pero esto no es lo que necesito. Necesito obtener el KClass de una variable. ¿Existe tal funcionalidad?
93

javap)KClass::classpara obtener el objeto de clase actual.something::classregresaKClass<out Something>mientrassomething.javaClass.kotlinregresaKClass<Something>EDITAR: Vea los comentarios, a continuación, y la respuesta de Alexander, arriba. Este consejo fue originalmente para Kotlin 1.0 y parece que ahora está obsoleto.
Dado que el lenguaje aún no admite una forma directa de obtener esto, considere definir un método de extensión por ahora .
fun<T: Any> T.getClass(): KClass<T> { return javaClass.kotlin } val test = 0 println("Kotlin type: ${test.getClass()}")O, si prefiere una propiedad:
val<T: Any> T.kClass: KClass<T> get() = javaClass.kotlin val test = 0 println("Kotlin type: ${test.kClass}")fuente
javabit e ir directamente a Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::classsomeClass::classEsta es mi solucion
val TAG = javaClass.simpleNameCon javaClass.simpleName puede obtener su nombre de clase. Además, el ejemplo anterior es muy útil para que los desarrolladores de Android lo declaren en la parte superior de la clase como una variable de instancia para fines de registro.
fuente
Aquí hay diferentes implementaciones para obtener nombres de clases. Puede utilizarlo según sus necesidades.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }Aquí podemos obtener el nombre de la clase en kotlin
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }Aquí podemos obtener el nombre de la clase en kotlin
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }Aquí están los resultados de las siguientes operaciones.
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 }fuente