tutorial support studio parcelize español documentación descargar android kotlin

android - support - kotlin documentation español



Kotlin: ¿Cómo decidir entre "lateinit" y "nullable variable"? (4)

Estos son dos conceptos completamente diferentes .

Puede usar lateinit para evitar cheques nulos al hacer referencia a la propiedad. Es muy conveniente en caso de que sus propiedades se inicialicen a través de la inyección de dependencia, o, por ejemplo, en el método de configuración de una prueba unitaria.

Sin embargo, debe tener en cuenta que al acceder a una propiedad de lateinit antes de que se haya inicializado se lateinit una excepción. Eso significa que debe usarlos solo si está absolutamente seguro de que se inicializarán.

Los tipos anulables , por otro lado, se utilizan cuando una variable puede contener null .

class A { lateinit var a: String fun cat() { print(a.length) // UninitializedPropertyAccessException is thrown a = "cat" print(a.length) // >>> 3 } } class B { var b: String? = null fun dog() { print(b.length) // won''t compile, null check is obligatory here print(b?.length) // >>> null b = "dog" print(b?.length) // >>> 3 } }

Para más información:

Estoy confundido para la variable de inicio y nullable, cuál usar para la variable.

lateinit var c: String var d: String? = null c = "UserDefinedTarget" // if not added initialisation for c than throws UninitializedPropertyAccessException if (c == "UserDefinedTarget") { //do some stuff. } //not throws any exception whether d is initialise or not. if(d == "UserDefinedTarget") { //do some stuff }


Depende. Variable anulable significa que la variable puede contener valor o nulo. lateinit significa que la variable debe inicializarse más tarde. Se debe inicializar antes de acceder a él. Si intenta acceder a la variable de lateinit UninitializedPropertyAccessException , se lanzará lateinit .

Siempre es mejor evitar el uso de nulos en tu aplicación. Los nulos son malos. Entonces, si puede inicializar la variable en onCreate entonces es mejor usar lateinit . Además, si usa la inyección de dependencias en su aplicación y los campos deben ser inyectados, también es un caso válido para usar lateinit lugar de manejar nulos.

Si, por algún motivo, no puede inicializar la variable, el código de inicialización puede resultar en nulo, o puede asignarse nulo a esta variable más tarde de lo que debería usar la variable que puede contener nulos. En términos generales, si nulo es un valor válido para la variable.


Un tipo que es anulable es solo eso, una cosa que tiene un estado válido que es nulo.

Una var de init tardía no anulable representa algo donde null es un estado no válido, pero por alguna razón no se puede rellenar en el constructor.

Las actividades de Android son un buen ejemplo del uso de lateinit. Las actividades deben tener un constructor sin argumentos y su ciclo de vida solo comienza realmente con onCreate ().


Utilice lateinit para las propiedades que no se pueden inicializar en un constructor.