gpt4 book ai didi

kotlin - 使用多个委托(delegate)来实现一个接口(interface)

转载 作者:行者123 更新时间:2023-12-02 12:17:31 26 4
gpt4 key购买 nike

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

我不想使用一个包含 1000 行的类,而是使用多个类分别围绕一个功能实现一些方法,并有一个委托(delegate)给功能类的“主”实现类。

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

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

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)并分别实现它们:

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 委托(delegate)语法编写一个新类:

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

或者使用构造函数参数:

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

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

关于kotlin - 使用多个委托(delegate)来实现一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com