Разбор поведения класса SpecialFunction

Программа напечатает Invoked from an instance. Первые скобки создают SpecialFunction, вторые вызывают invoke у полученного объекта.

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

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

Программа напечатает Invoked from an instance. Первые скобки создают SpecialFunction, вторые вызывают invoke у полученного объекта.

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

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

Условие

В примере объявлен класс SpecialFunction, реализующий функциональный интерфейс без параметров и без возвращаемого значения. При его вызове в консоль выводится строка "Invoked from an instance." Требуется предсказать, какой текст появится в выводе после исполнения функции main.

class SpecialFunction : () -> Unit {
    override fun invoke() {
        println("Invoked from an instance.")
    }
}

fun main() {
    try { SpecialFunction()() }
    catch (ex: Exception) { println("An error occurred") }
}

Ответ

Программа напечатает Invoked from an instance. Первые скобки создают SpecialFunction, вторые вызывают invoke у полученного объекта.

Класс реализует функциональный тип () -> Unit и предоставляет нужный invoke. Поэтому SpecialFunction()() эквивалентно созданию экземпляра и последующему вызову instance.invoke(). В показанном теле нет причины для Exception, так что ветка catch и текст An error occurred не выполняются.

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

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

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

Подробнее