Saya mengonversi Java ke Kotlin dengan Android Studio. Saya mendapatkan double bang setelah variabel instan. Apa double bang dan yang lebih penting di mana ini didokumentasikan?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
kotlin
kotlin-null-safety
mbr_at_ml
sumber
sumber
!!
di akhir pernyataan? IJ auto-convert ke Kotlin melakukan itu untuk sayaval price = sale.latest!!
sale.latest
bisa mengandungnull
; penugasan akan berhasil hanya jikasale.latest
bukan nol dan akan melemparkan NPE sebaliknya. Ini memberikan keamanan nol untukval 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 / atauassert
ion buruk).Berikut ini adalah contoh untuk membuat semuanya menjadi lebih jelas. Katakanlah Anda memiliki fungsi ini
Ini akan menghasilkan kesalahan kompilasi berikut.
Sekarang Anda dapat mencegahnya dengan menambahkan tanda tanya ke
String
jenis untuk membuatnya nullable.Jadi kita punya
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
Ini akan melempar
KotlinNullPointerException
sumber
Operator double-bang adalah pilihan yang sangat baik untuk penggemar
NullPointerException
(atau singkatnya NPE).Jadi Anda dapat menulis
a!!
, dan ini akan mengembalikan nilai bukan nol daria
(diString
sini misalnya) atau melempar NPE jikaa
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 .
sumber