Si j’ai un Boolean b
nullable, je peux faire la comparaison suivante en Java:
Boolean b = ...; if (b != null && b) { /* Do something */ } else { /* Do something else */ }
En Kotlin, je peux réaliser la même chose en utilisant le !!
opérateur:
val b: Boolean? = ... if (b != null && b!!) { /* Do something */ } else { /* Do something else */ }
Cependant, l’utilisation de !!
me sent un peu sommaire, contournant le système de sécurité null.
Y a-t-il une approche plus élégante pour cela?
Modifier Il me semble avoir trop simplifié. Pour les variables locales, comme le montre Banthar , cela fonctionne. Cependant, mon booléen b
est en fait une “propriété avec un champ de support” (je ne suis pas encore à la hauteur de ce que cela impose). C’est le résultat:
Vous pouvez comparer le booléen nullable à true
, false
ou null
aide de l’opérateur d’égalité:
var b: Boolean? = null if (b == true) { // b was not null and equal true }
Kotlin parsingra statiquement vos vérifications nulles. C’est bon:
val b: Boolean? = null if (b != null && b) { println(b) }
Même si cela échoue avec l’erreur de type:
val b: Boolean? = null if (b == null && b) { println(b) }
Pour plus d’informations: http://kotlinlang.org/docs/reference/null-safety.html
Vous pouvez également utiliser “opérateur de coalescence nulle” (qui fonctionnera pour les variables mutables):
val b: Boolean? = null if (b ?: false) { println(b) }
Si vous voulez vérifier correctement si un Boolean?
est true
ou false
vous pouvez le faire:
when(b) { true -> {} false -> {} }
Si vous voulez vérifier si elle est null
vous pouvez l’append (ou else
) comme valeur dans le cas when
:
when(b) { true -> {} false -> {} null -> {} } when(b) { true -> {} false -> {} else-> {} }
De ce que j’ai vu le booléen? est le résultat d’une méthode qui retourne Boolean sur un object qui est nullable
val person: Person? = null .... if(person?.isHome()) { //This won't comstack because the result is Boolean? //Do something }
La solution que j’ai utilisée est d’utiliser la fonction let
pour supprimer la valeur nulle retournée possible comme
person?.let { if(it.isHome()) { //Do something } }
Pour Kotlin, ce que j’utilise normalement est if (object?.booleanProperty ==true) { //do stuff }
cela ne fonctionnerait que lorsque la propriété est vraie et que l’object n’est pas nul. Pour l’inverse: if (!object?booleanProperty !=true) { //do Stuff}
Dans Kotlin, vous pouvez faire comme ceci:
val b: Boolean? = true if (b != null && b == true) { // if b is null, this should be null == true /* Do something */ } else { /* Do something else */ }