【发布时间】:2022-11-14 02:23:59
【问题描述】:
我想在特定上下文中使用 Kotlin delegation。
- 不应在构造函数中传递委托。
- 我想保留对委托的引用以供以后在代码中使用。在我覆盖的方法中,比如
printMessage(),我仍然需要像在多态继承中调用super.printMessage()一样调用委托。
我可以通过在by 子句(class Derived() : Base by BaseImpl(42) 使用Kotlin's documentation example)中简单地实例化一个匿名委托来完成第一个。然而,
这使我无法访问匿名委托,因为我不知道可以引用它。
我想做类似于以下的事情。但是,以下内容无法编译并出现错误'this' is not defined in this context。
class Derived() : Base by this.b {
val b: Base = BaseImpl(42)
override fun printMessage() {
b.printMessage()
print("abc")
}
}
我的Derived 类的每个实例都需要一个单独的委托。因此,将b 作为全局变量移动对我来说不是一个选择。
我最接近我需要的是构造函数的可选参数。这也不是一个好的选择,因为我不想让我的 Derived 类与任意代表一起构建。
【问题讨论】:
标签: kotlin delegates delegation kotlin-delegate