Jawaban:
Ini adalah T?konversi tipe nullable ( ) yang tidak aman ke tipe non-nullable ( T),
!!akan muncul NullPointerExceptionjika nilainya null.
Hal ini didokumentasikan di sini bersama dengan sarana keamanan tanpa batas dari Kotlin.
sale.latestbisa mengandung null; penugasan akan berhasil hanya jika sale.latestbukan nol dan akan melemparkan NPE sebaliknya. Ini memberikan keamanan nol untuk val price: tipenya akan non-null. Lihat kotlinlang.org/docs/reference/null-safety.html
!!Anda dapat gagal-cepat dan menemukan akar penyebab NPE. Saya berharap Java memiliki fitur serupa (yaitu, w / o jelekif pernyataan dan / atau assertion buruk).
Berikut ini adalah contoh untuk membuat semuanya menjadi lebih jelas. Katakanlah Anda memiliki fungsi ini
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Ini akan menghasilkan kesalahan kompilasi berikut.
Null can not be a value of a non-null type String
Sekarang Anda dapat mencegahnya dengan menambahkan tanda tanya ke Stringjenis untuk membuatnya nullable.
Jadi kita punya
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Ini menghasilkan hasil
null
Sekarang jika kita ingin fungsi untuk melempar pengecualian ketika nilai email adalah nol, kita dapat menambahkan dua tanda seru di akhir email. Seperti ini
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Ini akan melempar KotlinNullPointerException
Operator double-bang adalah pilihan yang sangat baik untuk penggemar NullPointerException(atau singkatnya NPE).
The Operator pernyataan tidak-nol
!!mengkonversi nilai apapun ke jenis non-null dan melempar pengecualian jika nilai adalah nol.
val nonNull = a!!.length
Jadi Anda dapat menulis a!!, dan ini akan mengembalikan nilai bukan nol dari a(di Stringsini misalnya) atau melempar NPE jika anol.
Jika Anda menginginkan NPE, Anda dapat memilikinya, tetapi Anda harus memintanya secara eksplisit. Operator ini harus digunakan dalam kasus di mana pengembang menjamin - nilainya tidak akan pernah menjadi nol .
!!di akhir pernyataan? IJ auto-convert ke Kotlin melakukan itu untuk sayaval price = sale.latest!!