Risposte:
Questo è pericoloso tipo nullable ( T?) conversione di un tipo non-nullable ( T),
!!si gettano NullPointerExceptionse il valore è null.
È documentato qui insieme ai mezzi di sicurezza nulla di Kotlin.
sale.latestpuò contenere null; l'assegnazione avrà esito positivo solo se sale.latestnon è 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 ifdichiarazioni e / o assertioni).
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 Stringtipo 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 Stringesempio 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!!