Qu'est-ce que le Kotlin double-bang (!!) opérateur?
Je suis la conversion de Java à Kotlin avec Android Studio. Je reçois 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"))
Vous devez vous connecter pour publier un commentaire.
C'est dangereux de type nullable (
T?
) la conversion d'un type non nullable (T
),!!
va jeterNullPointerException
si la valeur estnull
.Il est documenté ici avec Kotlin moyens de null-sécurité.
!!
est à la fin d'une instruction? IJ conversion automatique de Kotlin l'a fait pour moival price = sale.latest!!
sale.latest
peut contenirnull
; la cession ne peut réussir que sisale.latest
n'est pas null et va lancer des NPE autrement. Cela donne null sécurité pourval price
: son type sera non nulle. Voir kotlinlang.org/docs/reference/null-safety.html!!
vous pouvez fail-fast et de localiser la cause racine d'un NPE. Je souhaite Java avait une fonction similaire (qui est, w/o laidif
à des déclarations et/ouassert
ions).Voici un exemple pour rendre les choses plus claires.
Disons que vous avez cette fonction
Cela produira l'erreur de compilation suivante.
Maintenant, vous pouvez empêcher cela en ajoutant un point d'interrogation à la
String
type pour le rendre nullable.Nous avons donc
Ce produit un résultat de
null
Maintenant si nous voulons que la fonction lève une exception lorsque la valeur de l'e-mail est nulle, on peut ajouter deux exclamations à la fin de l'email. Comme ce
Cela permettra de jeter un
KotlinNullPointerException
Double-bang opérateur est une excellente option pour les fans de
NullPointerException
(ou NPE pour faire court).De sorte que vous pouvez écrire
a!!
, et cela renvoie une valeur non nulle dea
(unString
ici par exemple) ou de jeter un NPE sia
est null.Si vous voulez un NPE, vous pouvez l'avoir, mais vous devez le demander explicitement. Cet opérateur doit être utilisé dans les cas où le développeur est de garantir la valeur ne sera jamais nulle.