Jawaban:
Ini adalah T?
konversi tipe nullable ( ) yang tidak aman ke tipe non-nullable ( T
),
!!
akan muncul NullPointerException
jika nilainya null
.
Hal ini didokumentasikan di sini bersama dengan sarana keamanan tanpa batas dari Kotlin.
sale.latest
bisa mengandung null
; penugasan akan berhasil hanya jika sale.latest
bukan 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 assert
ion 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 String
jenis 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 String
sini misalnya) atau melempar NPE jika a
nol.
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!!