Return内部class调用对象函数

Return internal class calling object function

我正在使用 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()
   }
} 

问题是这无法编译,因为库 object returns 中的函数是 internal 类型,因此也需要标记为内部函数,但是这样做所以将从 TestApp 隐藏该功能。

另一种选择是根本没有 internal 修饰符,这样 TestApp 就可以看到库方法,但它也可以看到库项目中的 类

是否有我在这里忽略的简单解决方案,或者是否需要重新规划库项目的包和结构? (不知道在那种情况下该怎么做)

您必须为应用程序模块发布某种 public API 才能使用 getComponent() 方法 return 的组件。如果您想发布关于您的库的最少信息,您可以让它 return 一个仅包含对库的 public 可用方法调用的接口,并让您的 class 实现该接口:

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
}