Код выполнится и напечатает Hello world. Extension-функция объявлена для nullable receiver Example?, поэтому её можно вызвать у null без safe-call.
Вызов расширения у переменной, содержащей null
Код выполнится и напечатает 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.