Yanıtlar:
Bu güvenli null tipi (bir T?
non-null türü () dönüştürme T
),
!!
atmak NullPointerException
değeri ise null
.
Bu belgelenmiştir burada boş-emniyet Kotlin araçlarla birlikte.
sale.latest
içerebileceği anlamına gelir null
; atama yalnızca sale.latest
boş değilse başarılı olur ve aksi takdirde NPE'yi atar. Bu null güvenlik sağlar val price
: türü null olmaz. Bkz. Kotlinlang.org/docs/reference/null-safety.html
!!
başarısız olabilir ve bir NPE'nin temel nedenini bulabilirsiniz. Keşke Java benzer bir özelliği (yani, çirkin if
ifadeler ve / veya assert
iyonlar olmadan) olsaydı .
İşte işleri daha net hale getirmek için bir örnek. Diyelim ki bu işleve sahipsin
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Bu aşağıdaki derleme hatası verecektir.
Null can not be a value of a non-null type String
Şimdi, String
türü null edilebilir hale getirmek için bir soru işareti ekleyerek bunu önleyebilirsiniz .
Böylece sahibiz
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Bunun sonucu
null
E-posta değeri null olduğunda işlevin bir istisna atmasını istiyorsak, e-postanın sonuna iki ünlem ekleyebiliriz. Bunun gibi
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Bu bir KotlinNullPointerException
Çift patlama operatörü , NullPointerException
(veya kısaca NPE) hayranları için mükemmel bir seçenektir .
Olmayan boş onaylama işlemi operatör
!!
bir herhangi bir değer dönüştürür boş olmayan Çeşidi ve değer boş ise, bir durum oluşturur.
val nonNull = a!!.length
Böylece yazabilirsiniz a!!
ve bu null olmayan bir değer a
( String
örneğin burada) döndürür veya a
null ise bir NPE atar .
Bir NPE istiyorsanız, buna sahip olabilirsiniz, ancak açıkça istemeniz gerekir. Bu operatör, geliştiricinin garanti ettiği durumlarda kullanılmalıdır - değer asla boş olmaz .
!!
bir ifadenin sonunda olduğunda ne anlama gelir ?val price = sale.latest!!