Kotlin предлагает несколько мощных механизмов для безопасной работы с nullable типами, чтобы избежать NullPointerException
. Вот основные способы обработки null
:
Прямая проверка на null позволяет безопасно работать с переменными, которые могут быть null.
val name: String? = getName() // Может вернуть null
if (name != null) {
println(name.length) // Безопасный вызов, так как проверили на null
}
Оператор ?. позволяет безопасно вызывать методы и обращаться к свойствам объекта, который может быть null.
val length = name?.length // Вернет "null", если name равно null
Используется для предоставления альтернативного значения в случае, если выражение слева от ?: равно null.
val length = name?.length ?: 0 // Вернет 0, если name равно null
Оператор !! (утверждение "это не null") преобразует любой тип, допускающий null, в его ненуллабельный эквивалент. Если переменная окажется null, это приведет к NullPointerException. Рекомендуется использовать крайне редко и осознанно.
val length = name!!.length // Выбросит NullPointerException, если name равно null
Безопасное приведение типа пытается привести объект к указанному типу, возвращая null, если приведение невозможно.
val x: String? = y as? String // Вернет null, если y не является строкой
При работе с параметризованными типами и дженериками можно использовать ограничения типа, чтобы обеспечить работу только с ненуллабельными типами.
fun <T: Any> printLength(item: T) { // Допускается только ненуллабельный тип
println(item.toString().length)
}