Odpowiedzi:
Jest to niebezpieczna T?
konwersja typu ( ) dopuszczająca wartość null na typ ( T
), !!
która nie dopuszcza wartości null ,
zostanie zgłoszona, NullPointerException
jeśli wartość to null
.
Jest to udokumentowane tutaj wraz ze środkami bezpieczeństwa zerowego Kotlin.
sale.latest
może zawierać null
; przypisanie powiedzie się tylko wtedy, gdy sale.latest
nie jest zerowe, aw przeciwnym razie spowoduje zgłoszenie NPE. Daje to bezpieczeństwo null dla val price
: jego typ będzie różny od null. Zobacz kotlinlang.org/docs/reference/null-safety.html
!!
możesz szybko zawieść i zlokalizować główną przyczynę NPE. Chciałbym, żeby Java miała podobną funkcję (to znaczy bez brzydkich if
instrukcji i / lub assert
jonów).
Oto przykład, aby wszystko było jaśniejsze. Powiedz, że masz tę funkcję
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Spowoduje to następujący błąd kompilacji.
Null can not be a value of a non-null type String
Teraz możesz temu zapobiec, dodając znak zapytania do String
typu, aby nadać mu wartość null.
Więc mamy
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Daje to wynik
null
Teraz, jeśli chcemy, aby funkcja rzucała wyjątek, gdy wartość wiadomości e-mail jest zerowa, możemy dodać dwa wykrzykniki na końcu wiadomości. Lubię to
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Spowoduje to rzucenie KotlinNullPointerException
Operator podwójnego huku to doskonała opcja dla fanów NullPointerException
(w skrócie NPE).
Operatora stwierdzenie nie-zerowy
!!
przekształca każdą wartość do rodzaju nie zerowym i zgłasza wyjątek, że wartość ta jest zerowa.
val nonNull = a!!.length
Możesz więc pisać a!!
, a to zwróci niezerową wartość a
( String
na przykład a tutaj) lub wyrzuci NPE, jeśli a
jest null.
Jeśli chcesz NPE, możesz go mieć, ale musisz o to wyraźnie poprosić. Ten operator powinien być używany w przypadkach, gdy programista gwarantuje - wartość nigdy nie będzie zerowa .
!!
znajduje się na końcu oświadczenia? IJ auto-convert to Kotlin zrobił to za mnieval price = sale.latest!!