返回内部类的调用对象函数

我正在使用Kotlin进行测试,并且正在编写一个小型库,以供测试App项目导入和使用。

在图书馆项目中,我将我的类标记为internal类,因为我不希望它们对于App项目是可见的,但是我希望为该类库提供一个入口点,为此我使用如图所示的Kotlin object下面

 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() } } 

问题是这不能编译,因为Library object的函数返回一个internaltypes,因此也需要标记为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 }