Как создать внутренний класс, где только внешний класс может получить доступ к конструктору, а остальное видно везде?

Если xhr.abort(); вызывает перезагрузку страницы,

Затем вы можете установить onreadystatechange перед тем, как прервать:

// ↓ prevent page reload by abort()
xhr.onreadystatechange = null;
// ↓ may cause page reload
xhr.abort();
2
задан JorgeAmVF 16 January 2019 в 18:31
поделиться

1 ответ

К сожалению, private члены внутренних классов Kotlin не доступны из внешнего экземпляра:

private означает, что видимы только внутри этого класса
[114 ] Ссылка на Kotlin / Модификаторы видимости

Тем не менее, Java не имеет таких ограничений с ее модификаторами видимости:

access разрешено, если и только если это происходит в теле типа верхнего уровня ( §7.6 ), которое включает в себя объявление члена или конструктора.
Спецификация языка Java / §6 Имена / §6.6 Контроль доступа / §6.6.1 Определение доступности [ 1110]

Это один из немногих (раздражающих) случаев, которые я обнаружил, когда правила Котлина делают общий шаблон Java невозможным.

Единственные обходные пути (, если вы хотите сохранить свою текущую структуру), это переписать этот класс в Java или предоставить этому конструктору менее ограниченную видимость (например, internal.) [1120 ]

Об этом было обсуждение на форумах Kotlin - кажется, что это ограничение JVM, и что оно работает только в Java, потому что компилятор генерирует соответствующие synthetic средства доступа.

0
ответ дан Moira 16 January 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: