En Java podemos resolver la clase de una variable mediante getClass()
like something.getClass()
. En Kotlin soy consciente de something.javaClass
que está bien, pero quiero poder obtenerlo KClass
de una manera similar. He visto la Something::class
sintaxis pero esto no es lo que necesito. Necesito obtener el KClass de una variable. ¿Existe tal funcionalidad?
93
javap
)KClass::class
para obtener el objeto de clase actual.something::class
regresaKClass<out Something>
mientrassomething.javaClass.kotlin
regresaKClass<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
java
bit e ir directamente a Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Esta es mi solucion
val TAG = javaClass.simpleName
Con 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