kotlin接口委托中的此

问题描述 投票:1回答:1

使用接口委托时,有什么方法可以传递this?这样可以实现很好的可组合性-但我找不到实现此目的的方法。表示类似:

interface Foo {
}

class FooImpl(bar: Bar) : Foo {

}

class Bar: Foo by FooImpl(this) {
}

只要FooImpl不需要像这样的参数,它就可以工作-但在那儿访问另一个类会很棒-也许有人知道一种方法。否则,如果这值得不保留,我也将很感兴趣-否则由于某种原因将不可能。

kotlin interface delegation
1个回答
0
投票

您可以将Bar类分为两个部分,例如后端和前端。

前端将负责声明与委托人的接口,后端将托管委托人并充当组成目标。

例如:

interface Foo {
    fun sayHello(): String
}

class FooImpl(val bar: BarBackend) : Foo {
    override fun sayHello() = "Hello from ${bar.compositionTarget()}!"
}

class BarBackend() {
    val fooImpl: FooImpl = FooImpl(this)

    fun compositionTarget() = "backend"
}

class BarFrontend(backend: BarBackend) : Foo by backend.fooImpl

fun main() {
    val bar = BarFrontend(BarBackend())
    println(bar.sayHello())
}
© www.soinside.com 2019 - 2024. All rights reserved.