Все типы могут быть использованы в двух вариантах: как обычные типы и как nullable типы, чьи значения могут быть null.
Null подразумевает отсутствие значения и использование значения null в вычислениях нельзя, это приводит к выбросу исключения и закрытию программы, если исключение не было перехвачено.
Чтобы объявить тип как nullable необходимо добавить знак вопроса после названия типа и так как перед использованием переменной ей необходимо присвоить значение (инициализировать) можно сразу же присвоить значение null. Например, внизу приведен пользовательский класс, в котором есть одна переменная и одна функция для вывода этой переменной:
class TestClass {
var p1 : Int = 0
fun printP1(){
println(p1)
}
}
В функции onCreate объявляем экземпляр этого класса с nullable типом:
var t : TestClass? = null
Для использования nullable переменной необходимо производить безопасный вызов написав символ ? после названия переменной и если значение переменной t равно null код не выдаст ошибку, так как не будет вызвана функция printP1() объекта чьё значение не установлено (равно null).
t?.printP1()
Используя оператор !! можно принудительно изъять значение у nullable переменной, но в если значение переменной равно null компилятор выбрасывает исключение NullPointerException, что означает предпринята попытка использования значения null в коде:
t!!.printP1() // Ошибка! Значение t равно null
Также можно вернуть обычное значение из переменной с nullable типом используя оператор «элвис» - "?:". В примере ниже объявлена переменная с типом nullable Int и во время использования посредством оператора ?: указываем чтобы значение -1 было использовано если значение переменной a равно null:
var a : Int? = null
println(a ?: -1)
Реклама