Respuestas:
Esta es T?
una conversión de tipo anulable no segura ( ) a un tipo no anulable ( T
),
!!
se lanzará NullPointerException
si el valor es null
.
Está documentado aquí junto con los medios de seguridad nula de Kotlin.
sale.latest
puede contener null
; la asignación tendrá éxito solo si sale.latest
no es nula y de lo contrario arrojará NPE. Esto proporciona seguridad nula para val price
: su tipo será no nulo. Ver kotlinlang.org/docs/reference/null-safety.html
!!
, puede fallar rápidamente y localizar la causa raíz de un NPE. Desearía que Java tuviera una característica similar (es decir, sin if
declaraciones feas y / o assert
iones).
Aquí hay un ejemplo para aclarar las cosas. Digamos que tienes esta función
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Esto producirá el siguiente error de compilación.
Null can not be a value of a non-null type String
Ahora puede evitar eso agregando un signo de interrogación al String
tipo para hacerlo anulable.
Entonces tenemos
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Esto produce un resultado de
null
Ahora, si queremos que la función arroje una excepción cuando el valor del correo electrónico es nulo, podemos agregar dos exclamaciones al final del correo electrónico. Me gusta esto
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Esto arrojará un KotlinNullPointerException
El operador de doble explosión es una excelente opción para los fanáticos de NullPointerException
(o NPE para abreviar).
El operador de aserción no nulo
!!
convierte cualquier valor a un tipo no nulo y genera una excepción si el valor es nulo.
val nonNull = a!!.length
Entonces puede escribir a!!
, y esto devolverá un valor no nulo de a
(un String
aquí, por ejemplo) o arrojará un NPE si a
es nulo.
Si desea un NPE, puede tenerlo, pero debe solicitarlo explícitamente. Este operador debe usarse en casos en los que el desarrollador está garantizando: el valor nunca será nulo .
!!
está al final de una declaración? IJ se convirtió automáticamente a Kotlin lo hizo por míval price = sale.latest!!