Sobes.tech
Junior

Explique como funciona a propriedade 'lateinit' em Kotlin.

sobes.tech IA

Resposta da IA

O lateinit é utilizado para declarar propriedades não nulas que serão inicializadas posteriormente, antes do primeiro acesso a elas.

  • Aplica-se apenas a propriedades mutáveis (var).
  • Não pode ser usado com tipos de dados primitivos (como Int, Boolean, Float), pois eles não podem ser null.
  • O compilador não exige uma inicialização imediata da propriedade na sua declaração.
  • Se a propriedade for usada antes de sua inicialização, será lançada uma exceção UninitializedPropertyAccessException.

Exemplo:

class MyClass {
    lateinit var myProperty: String // A propriedade será inicializada posteriormente

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

    fun useProperty() {
        println(myProperty) // Seguro após a inicialização
    }
}

fun main() {
    val obj = MyClass()
    // obj.useProperty() // Aqui será lançada uma UninitializedPropertyAccessException
    obj.initializeProperty("Hello")
    obj.useProperty() // Vai imprimir "Hello"

    // Verificação de inicialização
    if (obj::myProperty.isInitialized) {
        println("Propriedade inicializada")
    }
}

É possível verificar se uma propriedade lateinit foi inicializada usando reflexão: ::propertyName.isInitialized.

O uso de lateinit é comum em frameworks onde as propriedades são injetadas (injeção de dependências) após a criação do objeto (por exemplo, em Android com elementos de UI ou injeção de dependências).