Risposte:
Questo è pericoloso tipo nullable ( T?
) conversione di un tipo non-nullable ( T
),
!!
si gettano NullPointerException
se il valore è null
.
È documentato qui insieme ai mezzi di sicurezza nulla di Kotlin.
sale.latest
può contenere null
; l'assegnazione avrà esito positivo solo se sale.latest
non è nulla e genererà NPE in caso contrario. Questo dà sicurezza nulla per val price
: il suo tipo sarà non null. Vedi kotlinlang.org/docs/reference/null-safety.html
!!
si può fallire velocemente e individuare la causa principale di un NPE. Vorrei che Java avesse una funzione simile (vale a dire senza brutte if
dichiarazioni e / o assert
ioni).
Ecco un esempio per rendere le cose più chiare. Di 'che hai questa funzione
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Ciò produrrà il seguente errore di compilazione.
Null can not be a value of a non-null type String
Ora puoi impedirlo aggiungendo un punto interrogativo al String
tipo per renderlo nullable.
Quindi abbiamo
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Questo produce un risultato di
null
Ora, se vogliamo che la funzione generi un'eccezione quando il valore dell'email è nullo, possiamo aggiungere due esclamazioni alla fine dell'email. Come questo
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Questo lancerà a KotlinNullPointerException
L'operatore double-bang è un'opzione eccellente per i fan di NullPointerException
(o in breve NPE).
L' operatore di asserzione non null
!!
converte qualsiasi valore in un tipo non null e genera un'eccezione se il valore è null.
val nonNull = a!!.length
Quindi puoi scrivere a!!
, e questo restituirà un valore non nullo di a
(un String
esempio qui) o genera un NPE se a
è nullo.
Se vuoi un NPE, puoi averlo, ma devi richiederlo esplicitamente. Questo operatore dovrebbe essere usato nei casi in cui lo sviluppatore garantisce - il valore non sarà mai nullo .
!!
è alla fine di una frase? IJ si è convertito automaticamente in Kotlin per meval price = sale.latest!!