【问题标题】:How to hide an interface in another interface?如何在另一个界面中隐藏一个界面?
【发布时间】:2019-07-15 04:51:06
【问题描述】:

我想写一个 Android 库,它又使用另一个 Androd 库。

假设我想写libHigh,它使用另一个libLow

libLow中有一个接口:

interface LowLevelInterface{
   fun methodA()
}

我在更高级别的库 libHigh 中实现了这一点:

open class OpenClassImpl : LowLevelInterface {
  override fun methodA(){//..}
}

这是一个“开放”类,因为稍后在应用层我希望从OpenClassImpl 扩展。 但我不想让界面“LowLevelInterface”可见以供以后上层应用使用。

如何从 libLow 中隐藏上层应用级别的接口?

【问题讨论】:

  • 制作private interface LowLevelInterface。但在这种情况下,您应该将其所有子类写在一个文件中。
  • 也许你可以在多个项目中拆分你的代码库,将LowLevelInterface 声明为internal 并在不同的模块中使用OpenClassImpl...见kotlinlang.org/docs/reference/visibility-modifiers.html#modules
  • @TarasParshenko 我无权访问 LibLow
  • 这样你就可以创建自己的私有接口并扩展LibLow
  • @TarasParshenko 你的意思是private interface NewPrivateInterface : LowLevelInterface {}

标签: android oop design-patterns kotlin interface


【解决方案1】:

这取决于您现有的代码是否可行,或者需要付出多少努力,但您可以拥有一个实现接口的属性而不是直接执行它:

open class OpenClassImpl {
    // or protected/private
    internal val lowLevelImpl: LowLevelInterface = { 
        // can access privates of OpenClassImpl here
    }
}

并更改相关调用以通过它。

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多