что лямбда будет превращена в обьект который будет держать ссылку на класс А? По сути в такой ситуации мы заворачиваем ссылку на класс А в объект который будет создан для лямбды и передаем все это дело в класс B.
В случае если мы захотим занулить А, получим утечку потому что ссылка класса А утекла во внутрь будущего обьекта лямбды который мы передали в B класс.
я уже нашел инфу о том что котлин оптимизирует лямбду в статику и помогает избежать утечки, поэтому я специально добавил использование поля someVar
class A {
var someVar = 5
val b = B()
b.method() {
//здесь меняем поле
//класса А
someVar = 3
}
}
class B {
fun method(a: () -> Unit) {
//дергаем лямбду
}
}
Конкретно в этом примере лямбда ограничена временем жизни. Про то что котлин делает статику с лямбды первый раз слышу
статью которую я читал в ней был пример использования анонимного класса. и в случае если создать анонимный класс на котлине и не использовать данные класса внутри которого создали анонимный класс там регенится статика, в случае использования полей внешнего класса создается уже объект как в котлине так и в джаве.
Статический истанс аннонимного ? В андроиде наверное да, и на java 1.6.
Обсуждают сегодня