Je convertis Java en Kotlin avec Android Studio. Je reçois un double coup après la variable d'instance. Quel est le double coup et surtout où est-ce documenté?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Il s'agit d'une conversion de type nullable (T?
) non sûre en un type non nullable (T
) . Elle lancera NullPointerException
si la valeur est null
.
Il est documenté ici avec les moyens de sécurité nulle de Kotlin.
Voici un exemple pour rendre les choses plus claires . Disons 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 empêcher cela en ajoutant un point d'interrogation au type String
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 une KotlinNullPointerException
C'est une bonne option pour les amateurs de NullPointerException
(ou NPE en abrégé): l'opérateur opérateur d'assertion non nul!!
convertit n'importe quelle valeur en un type non null et lève une exception si la valeur est null.
val lll = a!!.length
Ainsi, vous pouvez écrire a!!
, et ceci retournera une valeur non nulle de a
(une String
ici, par exemple) ou jettera 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} _.
J'espère que cela t'aides.