optionals non found and kotlin kotlin-null-safety

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.