Avatar ·

Cómo obtener KClass de un objeto en Kotlin en lugar de getClass() de Java

¡Hola! Estoy migrando de Java a Kotlin y me encontré con un problema. En Java solía usar getClass() para obtener información sobre la clase de un objeto en tiempo de ejecución. Por ejemplo:

Object obj = "Hello";
Class<?> clazz = obj.getClass(); // Obtenemos java.lang.Class
System.out.println(clazz.getName()); // Imprime java.lang.String

En Kotlin sé que existe KClass — es el análogo de java.lang.Class, pero ¿cómo obtenerlo? Intenté así:

val obj: Any = "Hello"
val clazz = obj::class // Error: "This expression is not a class reference"

O así:

val clazz = obj.javaClass // Funciona, pero devuelve java.lang.Class, no KClass

Necesito específicamente KClass porque estoy usando reflexión de Kotlin (por ejemplo, para serialización con kotlinx.serialization). ¿Cómo obtener correctamente KClass a partir de una instancia de objeto? Y ¿cuál es la diferencia entre