Выбор ответа Middle Функции, расширения и scope-функции обновлено

Зачем нужен @JvmOverloads

Вопрос

Зачем добавляют @JvmOverloads к функции с параметрами по умолчанию?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы Java получила перегрузки вместо значений по умолчанию. Java не знает о параметрах по умолчанию и видит один метод со всеми параметрами. @JvmOverloads генерирует набор перегрузок, отбрасывая параметры с дефолтами справа налево.

Варианты ответа

  1. Чтобы Kotlin-код мог вызывать функцию без части аргументов
  2. Чтобы ускорить вызов функции за счёт инлайнинга
  3. Чтобы разрешить переопределение функции в наследниках
  4. Чтобы Java получила перегрузки вместо значений по умолчаниюправильный ответ

Разбор

Java не знает о параметрах по умолчанию и видит один метод со всеми параметрами. @JvmOverloads генерирует набор перегрузок, отбрасывая параметры с дефолтами справа налево. В Android это классика для кастомных View: конструкторы (context), (context, attrs), (context, attrs, defStyleAttr). Kotlin-коду аннотация не нужна, на скорость и наследование она не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.