使用多个委托来实现一个接口

Use multiple delegates to implement an interface

我需要实现一个包含大约 50 个方法的接口(外部库,我无法控制它)。

我不想使用一个 class 的 1000 行代码,而是想使用几个 classes 围绕一个功能分别实现一些方法,并有一个“主要”实现 class 委托给功能 classes.

这可以在 kotlin 中使用委托来完成吗,还是我需要在主程序中实现每个方法 class?

不使用委托系统的示例代码:

class Main: ApiInterface {
  private val f1 = Feature1()
  private val f2 = Feature2()

  override fun m1() = f1.m1()
  override fun m2() = f1.m2()

  override fun m3() = f2.m3()
  override fun m4() = f2.m4()
}

class Feature1 {
  fun m1() { ... }
  fun m2() { ... }
}

class Feature2 {
  fun m3() { ... }
  fun m4() { ... }
}

可能和你做的很相似。 问题是将您的 Feature1Feature2 声明为接口并分别实现它们:

interface Feature1 {
    fun m1()
    fun m2()
}

interface Feature2 {
    fun m3()
    fun m4()
}

class Feature1Impl() : Feature1 {
    override fun m1() {}

    override fun m2() {}
}


class Feature2Impl : Feature2 {
    override fun m3() {}

    override fun m4() {}
}

最后一步很简单,使用 kotlins 委托语法编写一个新的 class:

class ApiImpl : 
    Feature1 by Feature1Impl(), 
    Feature2 by Feature2Impl(), 
    ApiInterface

或者使用构造函数参数:

class ApiImpl(feature1: Feature1, feature2: Feature2) : 
    Feature1 by feature1, 
    Feature2 by feature2, 
    ApiInterface

请注意,您需要添加 ApiInterface。由于我们实现了所有必需的功能,因此没有来自编译器的投诉。