0Pricing
Kotlin Academy · Lección

Parámetros de tipo reified: acceder a T en tiempo de ejecución

Use reified con funciones inline para realizar comprobaciones y conversiones de tipos en tiempo de ejecución.

Parámetros de tipo reified: acceder a T en tiempo de ejecución es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

El problema de la eliminación de tipos

Kotlin/JVM elimina la información de los tipos genéricos en tiempo de ejecución. Dentro de una función genérica fun foo(), no puede escribir T::class ni is T; después de la compilación, la JVM no sabe qué es T.

reified al rescate

Combine inline con reified en el parámetro de tipo. Como la función se inserta inline, el compilador sustituye el tipo real en cada punto de llamada, lo que hace que T sea completamente accesible en tiempo de ejecución.

inline fun <reified T> isInstance(value: Any): Boolean = value is T

val result = isInstance<String>("hello")  // true

Comprobación de tipos con is T

Sin reified, is T provoca un error de compilación («No se puede comprobar una instancia de un tipo borrado»). Con él, el compilador reescribe la comprobación usando el tipo concreto proporcionado en el sitio de llamada.

inline fun <reified T> filterByType(list: List<Any>): List<T> =
    list.filterIsInstance<T>()

Obtención de KClass a partir de T

Puede obtener la KClass del parámetro de tipo con T::class. Esto permite realizar comprobaciones de tipos y pasar referencias de clase a las API sin reflexión.

inline fun <reified T> className(): String = T::class.simpleName ?: "Unknown"

println(className<Int>())  // "Int"

Análisis sintáctico con reified

Un patrón habitual es un helper parseJson con seguridad de tipos que recibe automáticamente la clase de destino:

inline fun <reified T> parseJson(json: String): T =
    jacksonObjectMapper().readValue(json, T::class.java)

Patrón ViewModel / Service Locator

Los contenedores de inyección de dependencias suelen usar reified para devolver la instancia correcta sin exigirle que pase un argumento Class:

inline fun <reified T : ViewModel> Fragment.viewModel(): T =
    ViewModelProvider(this)[T::class.java]

Llamada a API de Java con Class<T>

Muchas API de Java requieren un argumento Class. reified permite llamarlas sin obligar a quienes las usan a pasar explícitamente la clase:

inline fun <reified T> Gson.fromJson(json: String): T =
    fromJson(json, T::class.java)

reified y restricciones de tipo

Puede combinar reified con límites superiores:

inline fun <reified T : Any> create(): T =
    T::class.java.getDeclaredConstructor().newInstance()

Limitaciones

Los parámetros de tipo reificados solo funcionan en funciones inline, no en clases, interfaces ni funciones que no sean inline. No puede llamar a una función reified con un tipo desconocido que solo se conozca en tiempo de ejecución.

Cómo lo implementa el compilador

En cada sitio de llamada, el compilador reemplaza T por el argumento de tipo real. El bytecode del sitio de llamada contiene referencias directas a la clase concreta; no se necesita reflexión.

Ejemplos de la biblioteca estándar

Funciones de la biblioteca estándar que usan reified: filterIsInstance(), emptyArray(), arrayOf(), typeOf(). Funcionan precisamente porque son funciones inline + reified.

Comprobación rápida

¿Por qué reified requiere que la función sea inline?

Resumen: parámetros de tipo reificados

Conclusiones clave:

  • reified hace que un parámetro de tipo sea accesible en tiempo de ejecución, evitando el borrado de tipos
  • Requiere que la función sea inline
  • Permite usar is T, T::class y T::class.java dentro de la función
  • Es la base del análisis sintáctico de JSON con seguridad de tipos, los helpers de DI y las API de referencias de clase

Preguntas frecuentes

¿La lección «Parámetros de tipo reified: acceder a T en tiempo de ejecución» es gratis?

Sí — el texto completo de «Parámetros de tipo reified: acceder a T en tiempo de ejecución» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Parámetros de tipo reified: acceder a T en tiempo de ejecución»?

Use reified con funciones inline para realizar comprobaciones y conversiones de tipos en tiempo de ejecución. Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Parámetros de tipo reified: acceder a T en tiempo de ejecución»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Funciones inline: eliminar la sobrecarga de las lambdas
  2. Modificadores noinline y crossinline
  3. Parámetros de tipo reified: acceder a T en tiempo de ejecución
  4. Patrones reified prácticos: análisis, DI y serialización
← Volver a Kotlin Academy