Qu'est-ce que le Kotlin double-bang (!! opérateur?

je convertis Java en Kotlin avec Android Studio. J'obtiens le double bang après la variable d'instance. Qu'est-ce que le double bang et surtout, où est-ce documenté?

mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
66
demandé sur hotkey 2015-12-17 22:10:19

2 réponses

il s'agit d'une conversion de type non susceptible de nullité ( T? ) en un type non susceptible de nullité ( T ). Il lancera NullPointerException si la valeur est null .

Il est documenté ici avec Kotlin moyens de null à la sécurité.

97
répondu hotkey 2015-12-18 12:03:58

voici un exemple pour clarifier les choses. Dites que vous avez cette fonction

fun main(args: Array<String>) {
    var email: String
    email = null
    println(email)
}

Cela produira l'erreur de compilation suivante.

Null can not be a value of a non-null type String

Maintenant, vous pouvez empêcher cela en ajoutant un point d'interrogation au type String pour le rendre nul.

nous avons Donc

fun main(args: Array<String>) {
    var email: String?
    email = null
    println(email)
}

cela produit un résultat de

null

maintenant si nous voulons que la fonction lance une exception lorsque la valeur de l'email est nulle, nous pouvons ajouter deux exclamations à la fin de l'email. Comme ceci

fun main(args: Array<String>) {
    var email: String?
    email = null
    println(email!!)
}

cela lancera un KotlinNullPointerException

40
répondu Alf Moh 2018-03-19 12:11:00