Réponses:
Il s'agit T?
d'une conversion non sécurisée de type nullable ( ) en un type non nullable ( T
), qui
!!
sera lancée NullPointerException
si la valeur est null
.
Il est documenté ici avec les moyens Kotlin de sécurité nulle.
sale.latest
peut contenir null
; l'affectation ne réussira que si elle sale.latest
n'est pas nulle et lancera NPE dans le cas contraire. Cela donne une sécurité nulle pour val 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, sans if
déclarations et / ou assert
ions laids ).
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
Vous pouvez maintenant éviter cela en ajoutant un point d'interrogation au String
type pour le rendre nullable.
Donc nous avons
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 lève une exception lorsque la valeur de l'email est nulle, nous pouvons ajouter deux exclamations à la fin de l'email. Comme ça
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Cela jettera un KotlinNullPointerException
L'opérateur double bang est une excellente option pour les fans de NullPointerException
(ou NPE pour faire court).
L' opérateur d'assertion non nul
!!
convertit toute valeur en un type non nul et lève une exception si la valeur est nulle.
val nonNull = a!!.length
Vous pouvez donc écrire a!!
, et cela retournera une valeur non nulle de a
(un String
ici par exemple) ou lancera un NPE si a
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 .
!!
est à la fin d'une déclaration? IJ auto-convert to Kotlin a fait cela pour moival price = sale.latest!!