Я конвертирую Java в Kotlin с Android Studio. Я получаю двойной взрыв после переменной экземпляра. Что такое двойной взрыв и, что еще важнее, где это документировано?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Я конвертирую Java в Kotlin с Android Studio. Я получаю двойной взрыв после переменной экземпляра. Что такое двойной взрыв и, что еще важнее, где это документировано?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Это небезопасное преобразование типа nullable (T?
) в тип, не содержащий NULL (T
).
Он будет бросать NullPointerException
, если значение null
.
Здесь документировано вместе с защитными средствами Kotlin.
Вот пример, чтобы прояснить ситуацию. Скажем, у вас есть эта функция
fun main(args: Array<String>) {
var email: String
email = null
println(email)
}
Это приведет к следующей ошибке компиляции.
Null can not be a value of a non-null type String
Теперь вы можете предотвратить это, добавив знак вопроса в тип String
чтобы сделать его обнуляемым.
Итак, мы имеем
fun main(args: Array<String>) {
var email: String?
email = null
println(email)
}
Это дает результат
null
Теперь, если мы хотим, чтобы функция выдавала исключение, когда значение email равно нулю, мы можем добавить два восклицания в конце письма. Как это
fun main(args: Array<String>) {
var email: String?
email = null
println(email!!)
}
Это вызовет KotlinNullPointerException
Это хороший вариант для любителей NullPointerException
(или NPE для краткости): оператор ненулевого утверждения !!
преобразует любое значение в ненулевой тип и выдает исключение, если значение равно нулю.
val nonNull = a!!.length
Таким образом, вы можете написать a!!
, и это вернет ненулевое значение a
(например, String
здесь) или бросить NPE, если a
не имеет значения.
Если вы хотите NPE, вы можете иметь его, но вы должны явно запросить его. Этот оператор следует использовать в тех случаях, когда разработчик дает гарантию - значение никогда не будет нулевым.
Законен следующий абсурд: var postTruth: String = null !!