Antworten:
Dies ist eine unsichere T?Konvertierung von nullable type ( ) in einen nicht nullable type ( T).
!!Wird ausgelöst, NullPointerExceptionwenn der Wert lautet null.
Es ist hier zusammen mit Kotlin-Mitteln der Nullsicherheit dokumentiert .
sale.latestenthalten kann null; Die Zuweisung ist nur erfolgreich, wenn sie sale.latestnicht 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 ifAussagen und / oder assertIonen).
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 StringTyp 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( Stringhier zum Beispiel) zurück oder wirft eine NPE, wenn aNull 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!!