es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Por qué usar ‘inline’ cuando se utiliza un tipo ‘reificado’

Todos los tutoriales que he leído sobre la reificación de tipos dicen que debemos usar ‘inline’ al usar ‘reified’, pero ninguno de ellos explica por qué.

Digamos que tengo una función:

inline fun <reified t=""> doSomething(value: T) {
    println("Haciendo algo con el tipo: ${T::class.simpleName}")    
}

Según entiendo, el uso de ‘reified’ evita la eliminación de tipos. Entonces, ¿por qué no podemos utilizarlo en una función normal no in-lineada? El uso de ‘inline’ hará que el compilador copie el cuerpo de la función anterior en los lugares de llamada. Pero, ¿por qué necesitamos que eso suceda?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual necesitamos usar inline al utilizar reified es porque reified depende de la expansión en línea para evitar la eliminación de tipo. Sin inline, la información de tipo se elimina durante la compilación y la función no puede acceder al tipo real en tiempo de ejecución.

    Cuando utilizamos reified, podemos referirnos al parámetro de tipo en tiempo de ejecución, lo cual no es posible sin él. Sin embargo, la JVM no admite la reificación de tipos genéricos, por lo tanto, necesitamos enlinear la función para que la información de tipo esté disponible en tiempo de ejecución. Cuando hacemos la función en línea, el bytecode generado para la función en línea se copia en la función que la llama en tiempo de compilación y la información de tipo está disponible para el código en la función en línea.

    Por lo tanto, usar reified sin inline no funcionaría, ya que la información de tipo se perdería durante la compilación y la función no podría acceder al tipo real. Al hacer que la función esté en línea, nos aseguramos de que la información de tipo esté disponible en tiempo de ejecución y así podemos hacer uso de reified para acceder al tipo real.

Comments are closed.