接口的继承和可见性



任务是将 Library1 接口 1 隐藏在 Library2 的外观后面。

完整的来源在这里 https://bitbucket.org/tim4dev/inheritance-interfaces/src/master/

  1. (库 1( 接口 1
  2. (库 2( 接口 2 : 接口 1
  3. (库 2( Klass2:接口 2
  4. (申请(
implementation project(":library2")
class KlassApp constructor(
private val klass: Interface2
) {
fun klassAppFun() {
klass.interface1fun1()
}
}

我们收到错误

KlassApp.kt: Unresolved reference: interface1fun1

问题Library1隐藏在Library2门面后面的标准图案是什么?

您需要选择:

  1. 使Library1成为Library2api依赖关系,而不是像您当前拥有的那样implementation(因此不要完全隐藏它(;

  2. 如果要隐藏它,则不能在Library2的公共部分中公开任何类型的Library1,其中包括扩展其接口。

有关apiimplementation的区别,请参阅文档:

那么什么时候应该使用 api 配置呢?API 依赖项是包含至少一种在库二进制接口中公开的类型,通常称为其 ABI(应用程序二进制接口(。这包括但不限于:

  • 超类或接口中使用的类型

  • 公共方法参数中使用的类型,包括泛型参数类型(其中 public 是编译器可见的东西,即 Java 世界中的公共、受保护和打包私有成员(

  • 公共领域中使用的类型

  • 公共批注类型

最新更新