Выбор ответа Junior Java-интероп обновлено
SAM-конверсия Java-интерфейсов
Вопрос
Почему в Kotlin можно написать executor.execute { doWork() }, хотя метод принимает Runnable?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: SAM-конверсия: лямбда становится реализацией Java-интерфейса. SAM-конверсия работает для любого Java-интерфейса с одним абстрактным методом: Runnable, Callable, Comparator, OnClickListener.
Варианты ответа
Runnableв Kotlin заменён на функциональный тип() -> Unit- Это особый случай, который работает только для
Runnable - Kotlin генерирует наследника
Executorс перегрузкой для лямбды - SAM-конверсия: лямбда становится реализацией Java-интерфейсаправильный ответ
Разбор
SAM-конверсия работает для любого Java-интерфейса с одним абстрактным методом: Runnable, Callable, Comparator, OnClickListener. Лямбда становится его реализацией. Для своих Kotlin-интерфейсов то же поведение включает fun interface. Runnable остаётся Java-интерфейсом, наследник Executor не создаётся.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.