¿Por qué Kotlin tiene MetaData en el file de class Kotlin?

Convertimos un file Java en un file Kotlin y luego lo comstackmos en un file de class. La class resultante es más grande que el file de class Java original. En el file de class de Kotlin, encontramos metadatos en cada class. ¿Por qué Kotlin almacena estos metadatos?

    Algunos aspectos del código en Kotlin no se pueden express en bytecode de Java puro (por ejemplo, nulability, constructores primarios, visibilidad internal , modificador lateinit , delegación de properties y más). En cambio, se serializan y almacenan como metadatos en las classs.

    Cuando utiliza una distribución JAR de una biblioteca de Kotlin, el comstackdor analiza los metadatos para descubrir estos attributes específicos de Kotlin a fin de utilizar la biblioteca como un artefacto de Kotlin con todas las características disponibles.

    En time de ejecución, los metadatos son utilizados por kotlin-reflect , la API de reflexión de Kotlin, para rebuild estos attributes y proporcionarles acceso mediante la reflexión.