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.