Что выведет код Middle Java-интероп обновлено
Значения по умолчанию через рефлексию Java
Вопрос
Что выведет код? По строке на каждый вывод.
class Greeter {
@JvmOverloads
fun greet(name: String = "гость", punct: String = "!"): String = "Привет, $name$punct"
}
fun main() {
val methods = Greeter::class.java.declaredMethods
.filter { it.name == "greet" }
.map { it.parameterCount }
.sorted()
println(methods)
println(Greeter().greet(punct = "?"))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: [0, 1, 2], Привет, гость? @JvmOverloads генерирует перегрузки для Java, отбрасывая параметры с дефолтами справа налево: без параметров, с одним name и с обоими.
Что выведет
[0, 1, 2]
Привет, гость?
Разбор
@JvmOverloads генерирует перегрузки для Java, отбрасывая параметры с дефолтами справа налево: без параметров, с одним name и с обоими. Рефлексия Java видит три метода greet. Из Kotlin по-прежнему можно пропускать любые параметры через именованные аргументы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.