Я конвертирую Java в Kotlin с помощью Android Studio. Я получаю двойной удар после переменной экземпляра. Что такое двойной взрыв и, что более важно, где это задокументировано?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
kotlin
kotlin-null-safety
mbr_at_ml
источник
источник
!!
в конце утверждения? IJval price = sale.latest!!
sale.latest
может содержатьnull
; назначение будет успешным, только еслиsale.latest
оно не равно нулю, и в противном случае будет выбрасывать NPE. Это дает нулевую безопасность дляval price
: его тип будет ненулевым. См. Kotlinlang.org/docs/reference/null-safety.html!!
вы можете быстро завершить работу и определить причину NPE. Я хотел бы, чтобы у Java была подобная особенность (то есть без уродливыхif
заявлений и / илиassert
ионов).Вот пример, чтобы прояснить ситуацию. Скажем, у вас есть эта функция
Это приведет к следующей ошибке компиляции.
Теперь вы можете предотвратить это, добавив знак вопроса к
String
типу, чтобы сделать его обнуляемым.Итак, мы имеем
Это дает результат
null
Теперь, если мы хотим, чтобы функция генерировала исключение, когда значение email равно нулю, мы можем добавить два восклицания в конце письма. Как это
Это бросит
KotlinNullPointerException
источник
Оператор Double-Bang - отличный вариант для поклонников
NullPointerException
(или NPE для краткости).Таким образом, вы можете написать
a!!
, и это вернет ненулевое значениеa
(String
например, здесь) или выбросит NPE, еслиa
равно нулю.Если вы хотите NPE, вы можете получить его, но вы должны явно запросить его. Этот оператор следует использовать в тех случаях, когда разработчик гарантирует - значение никогда не будет нулевым .
источник