non - ¿Qué es el operador de doble golpe de Kotlin(!!)?
optionals in kotlin (3)
Estoy convirtiendo Java a Kotlin con Android Studio. Obtengo doble explosión después de la variable de instancia. ¿Cuál es el doble golpe y, lo que es más importante, dónde está documentado?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Aquí hay un ejemplo para aclarar las cosas. Digamos que tienes esta función
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Esto producirá el siguiente error de compilación.
Null can not be a value of a non-null type String
Ahora puede evitar eso agregando un signo de interrogación al tipo de
String
para que sea anulable.
Entonces tenemos
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Esto produce un resultado de
null
Ahora, si queremos que la función arroje una excepción cuando el valor del correo electrónico es nulo, podemos agregar dos exclamaciones al final del correo electrónico. Me gusta esto
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Esto arrojará una
KotlinNullPointerException
Esta es una buena opción para los amantes de
NullPointerException
(o NPE para abreviar): ¡el
operador de aserción no nulo
!!
convierte cualquier valor a un tipo
no nulo
y genera una excepción si el valor es nulo.
val lll = a!!.length
Para que puedas escribir
a!!
, y esto devolverá un valor no nulo de
a
(una
String
aquí, por ejemplo) o arrojará un NPE si
a
es nulo.
Si desea un NPE, puede tenerlo, pero debe solicitarlo explícitamente. Este operador debe usarse en casos en los que el desarrollador está garantizando: el valor nunca será nulo .
Espero que esto ayude.
Esta es una conversión de tipo anulable no seguro (
T?
) A un tipo no anulable (
T
).
NullPointerException
si el valor es
null
.
Está documentado here junto con los medios de seguridad nula de Kotlin.