Je convertis Java en Kotlin avec Android Studio. J'obtiens un double coup 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"))
kotlin
kotlin-null-safety
mbr_at_ml
la source
la source
!!
est à la fin d'une déclaration? IJ auto-convert to Kotlin a fait cela pour moival price = sale.latest!!
sale.latest
peut contenirnull
; l'affectation ne réussira que si ellesale.latest
n'est pas nulle et lancera NPE dans le cas contraire. Cela donne une sécurité nulle pourval price
: son type sera non nul. Voir kotlinlang.org/docs/reference/null-safety.html!!
vous pouvez échouer rapidement et localiser la cause première d'un NPE. Je souhaite que Java ait une fonctionnalité similaire (c'est-à-dire, sansif
déclarations et / ouassert
ions laids ).Voici un exemple pour clarifier les choses. Dites que vous avez cette fonction
Cela produira l'erreur de compilation suivante.
Vous pouvez maintenant éviter cela en ajoutant un point d'interrogation au
String
type pour le rendre nullable.Donc nous avons
Cela produit un résultat de
null
Maintenant, si nous voulons que la fonction lève une exception lorsque la valeur de l'email est nulle, nous pouvons ajouter deux exclamations à la fin de l'email. Comme ça
Cela jettera un
KotlinNullPointerException
la source
L'opérateur double bang est une excellente option pour les fans de
NullPointerException
(ou NPE pour faire court).Vous pouvez donc écrire
a!!
, et cela retournera une valeur non nulle dea
(unString
ici par exemple) ou lancera un NPE sia
est nul.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 garantit - la valeur ne sera jamais nulle .
la source