Wenn ich eine Nullable habe Boolean b
, kann ich den folgenden Vergleich in Java durchführen:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
In Kotlin kann ich dasselbe erreichen, indem ich den !!
Operator verwende:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Die Verwendung von !!
fühlt sich für mich jedoch etwas skizzenhaft an und umgeht das Null-Sicherheitssystem.
Gibt es dafür einen eleganteren Ansatz?
Bearbeiten Es scheint, ich habe ein bisschen zu stark vereinfacht. Für lokale Variablen funktioniert es , wie Banthar zeigt. Mein Boolescher Wert b
ist jedoch tatsächlich eine "Eigenschaft mit einem Hintergrundfeld" (ich bin noch nicht wirklich auf dem neuesten Stand, was dies bedeutet). Das ist das Ergebnis:
!!b
und nicht einfachb
? (Ich bin nicht so vertraut mit Kotlin, nur Kuriositäten)b
möglicherweisenull
und eine der Funktionen von Kotlin ist Null Safety , die Kompilierungsfehler beim Versuch, nullfähige Referenzen auszuwerten, verursacht. Daher führt die Verwendung von plain zub
einem Kompilierungsfehler :)b != nil
, bevor die rechte Seite überprüft wird?val r = b?doSomething() ?: doSomethingElse()
sollte funktionieren.Antworten:
Sie können auf NULL festlegbare boolean mit vergleichen
true
,false
odernull
unter Verwendung von Gleichheitsoperator:quelle
!
true
,false
odernull
. Dannif (b != true)
wissen Sie nur, dass b nicht wahr ist, aber Sie wissen nichts überfalse
odernull
if (b != true) // b is null or false
eg3.if (b == false) // b is false
Wenn Sie sauber prüfen möchten, ob a
Boolean?
isttrue
oderfalse
Sie Folgendes tun können:Wenn Sie überprüfen möchten, ob dies der Fall ist, können
null
Sie dies (oderelse
) als Wert in Folgendes einfügenwhen
:quelle
Kotlin analysiert Ihre Nullprüfungen statisch. Das ist in Ordnung:
Auch wenn dies mit einem Typfehler fehlschlägt:
Weitere Informationen finden Sie unter: http://kotlinlang.org/docs/reference/null-safety.html
Sie können auch den "Null-Koaleszenz-Operator" verwenden (der für veränderbare Variablen funktioniert):
quelle
var
?) ... Wenn es sich um ein lokales Beispiel handelt, kannvar
der Compiler die sichere Umwandlung weiterhin zulassen. Für weitere Sonderfälle lesen Sie stackoverflow.com/questions/34498562/…val booleanVal = nullableProducer?.produceVal() ?: false; if (booleanVal) {}
Nach dem, was ich den Booleschen gesehen habe? ist das Ergebnis einer Methode, die Boolean für ein Objekt zurückgibt, das nullwertfähig ist
Die Lösung, die ich verwendet habe, besteht darin, die
let
Funktion zu verwenden, um den möglichen zurückgegebenen Nullwert wie folgt zu entfernenquelle
if
Block durch ersetzenperson?.isHome() == true
.In Kotlin können Sie Folgendes tun:
quelle
b != null && b == true
ist das gleiche wieb == true
.Fügen Sie zunächst die folgende benutzerdefinierte Inline-Funktion hinzu:
dann können Sie Code wie folgt schreiben:
quelle
Für Kotlin benutze ich normalerweise
Dies würde nur funktionieren, wenn die Eigenschaft wahr ist und das Objekt nicht null ist. Für das Gegenteil:
quelle
Verwenden wir eine
if-else
Anweisung mitElvis Operator
:quelle
Es ist ziemlich einfach, eine Erweiterungsfunktion hinzuzufügen, wenn dies hilfreich ist.
quelle
quelle
Sie können mit sicherem Operator "let" tun
quelle