Nullable

Nullable

Все типы могут быть использованы в двух вариантах: как обычные типы и как 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)