Sobes.tech
Junior — Middle

É possível fazer uma redefinição de um campo declarado com a propriedade lateinit?

sobes.tech IA

Resposta da IA

No Kotlin, uma propriedade declarada com o modificador lateinit não pode ser sobrescrita numa subclasse usando lateinit novamente.

A razão é que lateinit aplica-se apenas a propriedades var que não têm um valor inicial, mas que serão inicializadas posteriormente. Ao sobrescrever a propriedade numa subclasse, não é possível alterar os seus modificadores para declarar novamente lateinit.

Se na classe base a propriedade for declarada como lateinit var, na subclasse pode ser sobrescrita como uma propriedade normal com inicialização ou com um getter/setter, mas não com lateinit.

Exemplo:

open class Base {
    lateinit var data: String
}

class Derived : Base() {
    override var data: String = "Initialized"
}

Aqui, em Derived, a propriedade data é sobrescrita sem lateinit, com inicialização.

Portanto, é possível sobrescrever uma propriedade com lateinit, mas não declarara novamente com lateinit.