Выбор ответа Middle Классы, data и sealed обновлено

inner class и утечка памяти

Вопрос

Чем inner class отличается от вложенного класса без модификатора?

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

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

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

Коротко

Правильный ответ: inner class хранит неявную ссылку на внешний объект. В Kotlin вложенный класс по умолчанию статический, ссылки на внешний объект у него нет. inner добавляет ссылку this@Outer, как нестатический внутренний класс в Java.

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

  1. inner class не видит приватные члены внешнего класса
  2. inner class хранит неявную ссылку на внешний объектправильный ответ
  3. Вложенный класс без модификатора хранит ссылку на внешний объект
  4. Ничем, это синонимы: оба компилируются в статический класс

Разбор

В Kotlin вложенный класс по умолчанию статический, ссылки на внешний объект у него нет. inner добавляет ссылку this@Outer, как нестатический внутренний класс в Java. Если такой объект живёт дольше внешнего (колбэк, поток, статическое поле), он держит внешний объект в памяти, классическая утечка Activity. Видимость приватных членов внешнего класса есть у обоих вариантов.

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

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