Ich konvertiere Java nach Kotlin mit Android Studio. Ich bekomme Doppelknall nach der Instanzvariablen. Was ist der Doppelknall und was noch wichtiger ist, wo ist dies dokumentiert?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
kotlin
kotlin-null-safety
mbr_at_ml
quelle
quelle
!!
am Ende einer Aussage steht? IJ Auto-val price = sale.latest!!
sale.latest
enthalten kannnull
; Die Zuweisung ist nur erfolgreich, wenn siesale.latest
nicht null ist, und wirft andernfalls NPE. Dies gibt Null-Sicherheit fürval price
: Sein Typ ist nicht Null. Siehe kotlinlang.org/docs/reference/null-safety.html!!
Sie schnell ausfallen und die Grundursache einer NPE lokalisieren. Ich wünschte, Java hätte eine ähnliche Funktion (dh ohne hässlicheif
Aussagen und / oderassert
Ionen).Hier ist ein Beispiel, um die Dinge klarer zu machen. Angenommen, Sie haben diese Funktion
Dies führt zu folgendem Kompilierungsfehler.
Jetzt können Sie dies verhindern, indem Sie dem
String
Typ ein Fragezeichen hinzufügen , um ihn auf Null zu setzen.Also haben wir
Dies ergibt ein Ergebnis von
null
Wenn die Funktion nun eine Ausnahme auslösen soll, wenn der Wert von E-Mail Null ist, können wir am Ende der E-Mail zwei Ausrufezeichen hinzufügen. So was
Dies wird ein werfen
KotlinNullPointerException
quelle
Double-Bang-Operator ist eine ausgezeichnete Option für Fans von
NullPointerException
(oder kurz NPE).Sie können also schreiben
a!!
, und dies gibt einen Nicht-Null-Wert vona
(String
hier zum Beispiel) zurück oder wirft eine NPE, wenna
Null ist.Wenn Sie eine NPE wollen, können Sie sie haben, aber Sie müssen explizit danach fragen. Dieser Operator sollte in Fällen verwendet werden, in denen der Entwickler garantiert - der Wert wird niemals null sein .
quelle