Saltar al contenido

¿Por qué Kotlin no permite usar lateinit con tipos primitivos?

Solución:

Para los tipos de objetos (que no aceptan valores NULL), Kotlin usa la null valor para marcar que un lateinit la propiedad no se ha inicializado y lanzar la excepción apropiada cuando se accede a la propiedad.

Para los tipos primitivos, no existe tal valor, por lo que no hay forma de marcar una propiedad como no inicializada y proporcionar los diagnósticos que lateinit necesita proporcionar. (Podríamos intentar usar un marcador separado de algún tipo, pero ese marcador no se actualizaría al inicializar el campo a través de la reflexión, que es un caso de uso importante de lateinit).

Por lo tanto, lateinit se admite solo para propiedades de tipos de objeto.

Una respuesta corta es que con primitivas siempre puedes usar 0 como predeterminado y con tipos que aceptan valores NULL null por defecto. Solo los tipos no primitivos que no aceptan valores NULL pueden necesitar lateinit para evitar el tipo de sistema de seguridad.

En realidad, no es necesario inicializar una variable en Kotlin siempre que tenga un valor antes de el primer acceso y puede ser inactivamente demostrado. Lo que significa que este código es perfectamente válido:

fun main(args: Array<String>) {
    var x: Int
    val y: Double

    x = 0
    y = x + 0.1

    println("$x, $y") 
}

Pero hay casos (raros) en los que la inicialización no se puede probar estáticamente. El caso más común es un campo de clase que usa cualquier forma de inyección de dependencia:

class Window {
    @Inject lateinit parent: Parent
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *