Функция возврата объекта внутреннего класса

Я тестирую с Kotlin, и я пишу небольшую библиотеку, которую нужно импортировать и использовать в тестовом проекте App.

В проекте библиотеки я пометил мои классы как internal потому что я не хочу, чтобы они были видимыми для проекта приложения, но я хотел бы иметь одну точку входа для библиотеки, и для этого я использую object Kotlin, как показано ниже

 LIBRARY object Library { fun getComponent() = AwesomeComponent() } internal class AwesomeComponent() { // some implementation } TEST APP class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val component = Library.getComponent() } } 

Проблема в том, что это не скомпилируется, потому что функция в object Library возвращает internal тип и поэтому должна быть помечена как внутренняя, но при этом скрытие функции из TestApp.

Другой вариант заключается в том, чтобы не иметь internal модификатора вообще, поэтому TestApp может видеть метод Library, но затем он также может видеть классы внутри проекта Library

Есть ли простое решение, которое я рассматриваю здесь, или ему нужно пройти перепланировку пакетов и структуру проекта библиотеки? (не уверен, как это сделать в этом случае)

Вы должны опубликовать какой-то публичный API для модуля приложения, чтобы иметь возможность использовать компонент, возвращаемый методом getComponent() . Если вы хотите опубликовать минимальную информацию о своей библиотеке, вы можете вернуть ей интерфейс, содержащий только общедоступные вызовы методов в библиотеке, и сделать ваш класс реализацией этого интерфейса:

 object Library { fun getComponent(): IAwesomeComponent = AwesomeComponent() } interface IAwesomeComponent { // methods you want to call on the component in the app module } internal class AwesomeComponent(): IAwesomeComponent { // implementations of the interface methods }