Обяснете какво е null safety в езика Kotlin.
sobes.tech AI
Отговор от AI
Безопасност при null — това е функция на езика Kotlin, която предотвратява грешки, свързани с null препратки. Тя се постига чрез създаване на два типа препратки: nullable (разрешава null) и non-nullable (не разрешава null).
Non-nullable типовете се обявяват както обикновено:
var nonNullableString: String = "Hello" // Не може да бъде null
Nullable типовете се обявяват с използване на символа ? след името на типа:
var nullableString: String? = "Hello" // Може да бъде null
nullableString = null
Kotlin изисква явна обработка на nullable типовете, предотвратявайки директен достъп до техните членове без предварителна проверка за null. За това се използват следните механизми:
-
Оператор за безопасно извикване (
?.): Извиква метод или достъпва свойство само ако обектът не еnull. В противен случай връщаnull.val length = nullableString?.length // length ще бъде `Int?` или `null` -
Оператор Елвис (
?:): Предоставя стойност по подразбиране, ако изразът отляво на оператора еnull.val nonNullLength = nullableString?.length ?: 0 // nonNullLength ще бъде `Int`, 0 ако nullableString е null -
Оператор за потвърждение на ненулевост (
!!): Преобразува nullable тип в non-nullable. Ако стойността еnull, се хвърля изключениеNullPointerException. Използва се, когато разработчикът е сигурен, че стойността не еnull.val sureLength = nullableString!!.length // Ще хвърли NullPointerException ако nullableString е null -
Проверки с
if: Традиционна проверка заnullсif. Компилаторът извършва т.нар. smart cast (умно преобразуване) на nullable типа в non-nullable вътре в блокаif, ако проверката премине.if (nullableString != null) { val length = nullableString.length // Тук nullableString се третира като String }
Тези механизми позволяват явно управление на ситуации, когато променливата може да бъде null, което значително намалява вероятността от възникване на NullPointerException по време на изпълнение.