Yanıtlar:
Bu güvenli null tipi (bir T?non-null türü () dönüştürme T),
!!atmak NullPointerExceptiondeğeri ise null.
Bu belgelenmiştir burada boş-emniyet Kotlin araçlarla birlikte.
sale.latestiçerebileceği anlamına gelir null; atama yalnızca sale.latestboş 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 ififadeler ve / veya assertiyonlar 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, Stringtü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 anull 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!!