Создание публичного экземпляра частного внутреннего класса в Котлине

Почему Kotlin не позволяет создавать публичные экземпляры частных внутренних классов в отличие от Java?

Работает на Java:

public class Test { public A a = new A(); private class A { } } 

Не работает в Котлине (класс должен быть public ):

 class Test { var a = A() // ^ // 'public' property exposes its private type 'A' private inner class A } 

Я бы предположил, потому что на самом деле нет такого случая, когда кажется правильным. Любой код доступа к свойству a не имеет доступа к его типу. Вы не можете назначить его переменной. Test.A myVar Объявление Test.A myVar вне класса Test будет ошибочно. Не допуская этого, код будет вынужден быть более последовательным. Лучше спросить, почему Java разрешит это? Другие языки, такие как быстрые, имеют одинаковое ограничение.

https://kotlinlang.org/docs/reference/visibility-modifiers.html#classes-and-interfaces

состояния:

ПРИМЕЧАНИЕ для пользователей Java: внешний класс не видит частных членов своих внутренних классов в Котлине.

Для вашего использования вы можете использовать вложенные классы

В private inner classes вы можете получить доступ только к членам своего внешнего класса.

Я думаю, что команда kotlin реализовала его таким образом, чтобы можно было уменьшить объем членов в private inner classes чтобы они были доступны только внутри inner class . Я думаю, что это невозможно в Java.

Intereting Posts
Выполнение программы Java и Kotlin с библиотекой времени исполнения Kotlin в пути к классам Неразрешенный справочник DaggerApplicationComponent Как преобразовать символ в значение ascii на языке kotlin Доступ к типу делегата Kotlin без экземпляра Кинжал 2 в Котлине неразрешимая ссылка DaggerXXXSub Имя файла, имя каталога или синтаксис метки тома неверны – Kotlin – Maven Как вызвать функцию baseactivity из viewmodel в android Kotlin .let {} null безопасность предположительно ложная ошибка Флажок в Recycler Элемент View, если установлен в true, проверяется на наличие ложных срабатываний Bluetooth-клиент Socket получает одинаковое исключение каждый раз Intellij IDEA Kotlin Android Theme.AppCompat Ресурс не найден Dagger2 – FragmentSubcomponentBuilder не реализует AndroidInjector.Factory Kotlin Generics и nullable Тип класса Счетчик приращений и декретов FireStore Transactions получает непоследовательный результат Как файл kotlin работает на Android-версии 3.0 Canary 4?