Что выведет код Middle Делегаты обновлено
Свой делегат свойства
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlin.reflect.KProperty
class Logged<T>(private var value: T) {
operator fun getValue(thisRef: Any?, p: KProperty<*>): T {
println("get ${p.name}")
return value
}
operator fun setValue(thisRef: Any?, p: KProperty<*>, v: T) {
println("set ${p.name}=$v")
value = v
}
}
class User {
var age by Logged(30)
}
fun main() {
val u = User()
u.age += 1
println(u.age)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: get age, set age=31, get age, 31. u.age += 1 раскрывается в чтение и запись: сначала getValue (печатает get age), потом setValue с 31.
Что выведет
get age
set age=31
get age
31
Разбор
u.age += 1 раскрывается в чтение и запись: сначала getValue (печатает get age), потом setValue с 31. Затем println(u.age) снова вызывает getValue, печатает get age, и только потом выводится значение.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.