Respuestas:
Esta es T?una conversión de tipo anulable no segura ( ) a un tipo no anulable ( T),
!!se lanzará NullPointerExceptionsi el valor es null.
Está documentado aquí junto con los medios de seguridad nula de Kotlin.
sale.latestpuede contener null; la asignación tendrá éxito solo si sale.latestno 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 ifdeclaraciones feas y / o assertiones).
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 Stringtipo 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 Stringaquí, por ejemplo) o arrojará un NPE si aes 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!!