Antworten:
Dies ist eine unsichere T?
Konvertierung von nullable type ( ) in einen nicht nullable type ( T
).
!!
Wird ausgelöst, NullPointerException
wenn der Wert lautet null
.
Es ist hier zusammen mit Kotlin-Mitteln der Nullsicherheit dokumentiert .
sale.latest
enthalten kann null
; Die Zuweisung ist nur erfolgreich, wenn sie sale.latest
nicht null ist, und wirft andernfalls NPE. Dies gibt Null-Sicherheit für val 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ässliche if
Aussagen und / oder assert
Ionen).
Hier ist ein Beispiel, um die Dinge klarer zu machen. Angenommen, Sie haben diese Funktion
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Dies führt zu folgendem Kompilierungsfehler.
Null can not be a value of a non-null type String
Jetzt können Sie dies verhindern, indem Sie dem String
Typ ein Fragezeichen hinzufügen , um ihn auf Null zu setzen.
Also haben wir
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
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
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Dies wird ein werfen KotlinNullPointerException
Double-Bang-Operator ist eine ausgezeichnete Option für Fans von NullPointerException
(oder kurz NPE).
Der Nicht-Null-Assertionsoperator
!!
konvertiert einen beliebigen Wert in einen Nicht-Null-Typ und löst eine Ausnahme aus, wenn der Wert Null ist.
val nonNull = a!!.length
Sie können also schreiben a!!
, und dies gibt einen Nicht-Null-Wert von a
( String
hier zum Beispiel) zurück oder wirft eine NPE, wenn a
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 .
!!
am Ende einer Aussage steht? IJ Auto-val price = sale.latest!!