Вызов расширения у переменной, содержащей null

Код выполнится и напечатает Hello world. Extension-функция объявлена для nullable receiver Example?, поэтому её можно вызвать у null без safe-call.

Короткий ответ

Что ответить на собеседовании

Код выполнится и напечатает Hello world. Extension-функция объявлена для nullable receiver Example?, поэтому её можно вызвать у null без safe-call.

Подробный разбор

Ответ с пояснениями

Условие

Выполнится ли приведённый код без исключений? Если да, какое сообщение появится в консоли?

class Example

fun Example?.doSomething() {
    println("Hello world")
}

fun main() {
    var sample: Example? = null
    sample.doSomething()
}

Ответ

Код выполнится и напечатает Hello world. Extension-функция объявлена для nullable receiver Example?, поэтому её можно вызвать у null без safe-call.

Расширение не становится виртуальным методом экземпляра: nullable-значение передаётся как receiver, а тело не обращается к его свойствам. Если внутри понадобятся данные объекта, следует проверить this на null. Выражение sample?.doSomething() вело бы себя иначе: при null оно полностью пропустило бы вызов.

Источник: kotlinlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее