Программа напечатает Invoked from an instance. Первые скобки создают SpecialFunction, вторые вызывают invoke у полученного объекта.
Разбор поведения класса SpecialFunction
Программа напечатает 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 не выполняются.