Sobes.tech
Junior

Explica cómo funciona la propiedad 'lateinit' en Kotlin.

sobes.tech AI

Respuesta de la IA

lateinit se utiliza para declarar propiedades no nulas que serán inicializadas más tarde, antes del primer acceso a ellas.

  • Se aplica solo a propiedades mutables (var).
  • No puede usarse con tipos de datos primitivos (como Int, Boolean, Float), ya que no pueden ser null.
  • El compilador no requiere una inicialización inmediata de la propiedad en su declaración.
  • Si la propiedad se usa antes de su inicialización, se lanzará una excepción UninitializedPropertyAccessException.

Ejemplo:

class MyClass {
    lateinit var myProperty: String // La propiedad será inicializada más tarde

    fun initializeProperty(value: String) {
        myProperty = value
    }

    fun useProperty() {
        println(myProperty) // Seguro después de la inicialización
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Aquí se lanzará UninitializedPropertyAccessException
    obj.initializeProperty("Hello")
    obj.useProperty() // Mostrará "Hello"

    // Verificación de inicialización
    if (obj::myProperty.isInitialized) {
        println("La propiedad está inicializada")
    }
}

Se puede verificar si una propiedad lateinit ha sido inicializada usando reflexión: ::propertyName.isInitialized.

El uso de lateinit es común en frameworks donde las propiedades se inyectan (inyección de dependencias) después de crear el objeto (por ejemplo, en Android con elementos de UI o inyección de dependencias).