Внутренний класс просто имеет ссылку на включающий экземпляр и поэтому не наследует членов внешнего класса.
Поскольку внутренние классы имеют ссылку на включающий класс, к этому включающему экземпляру можно получить доступ только внутри класса (Java: Outer.this
, Kotlin: this@Outer
), но вы правы в том, что вы не может получить доступ к включающему экземпляру извне внутреннего класса.
Класс может быть помечен как inner
, чтобы иметь доступ к членам внешнего класса.
Kotlin Reference / Вложенные и внутренние классы
Создание собственной функции получения для возврата включающего экземпляра - единственный способ сделать это.
Хотя сгенерированная ссылка на внешний экземпляр является пакетной , согласно Джону Скиту , ни у Java, ни у Kotlin нет никакого способа получить этот экземпляр. Вы можете использовать отражение, но, поскольку имя сгенерированного поля, возможно, ненадежно, ваш лучший выбор - изменить внутренний класс.