Sobes.tech
Назад к вопросам
Junior — Middle
69

Как строится наследование и связь между типами, допускающими и не допускающими значения null?

Компании, где спрашивали
Effective Technologies

Ответ от нейросети

sobes.tech AI

В языках программирования, поддерживающих nullable-типы (например, Kotlin или Swift), наследование и связь между типами с возможностью принимать null и без таковой строится следующим образом:

  • Тип, допускающий null, обычно является расширением (подтипом) типа, не допускающего null. Это значит, что если у вас есть тип String, то String? (nullable) — это тип, который может содержать либо строку, либо null.

  • Такой подход позволяет использовать объекты типа String там, где ожидается String?, но не наоборот, что обеспечивает безопасность типов и предотвращает ошибки NullPointerException.

Пример на Kotlin:

val nonNullString: String = "Hello"
val nullableString: String? = null

fun printLength(str: String) {
    println(str.length)
}

printLength(nonNullString)      // Работает
// printLength(nullableString)  // Ошибка компиляции, т.к. nullableString может быть null

Таким образом, связь между nullable и non-nullable типами строится по принципу подтипизации, где nullable тип является расширением non-nullable, позволяя явно обрабатывать случаи с null.