gpt4 book ai didi

Kotlin:引用构造函数未传递的委托(delegate)

转载 作者:行者123 更新时间:2023-12-05 02:30:07 34 4
gpt4 key购买 nike

我想使用 Kotlin delegation在特定的上下文中。

  • 不应在构造函数中传递委托(delegate)。
  • 我想保留对委托(delegate)的引用以供以后在代码中使用。在我重写的方法中,比如 printMessage(),我仍然需要像在多态继承中调用 super.printMessage() 一样调用委托(delegate)。

我可以通过在 by 子句(class Derived() : Base by BaseImpl(42) using Kotlin's documentation example)中简单地实例化一个匿名委托(delegate)来做第一个。然而,这会阻止我访问匿名委托(delegate),因为我不知道如何引用它。

我想做类似下面的事情。然而,以下内容不会编译并出现错误 '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 类的每个实例确实需要一个单独的委托(delegate)。所以将 b 作为全局变量移动对我来说不是一个选项。

最接近我需要的是构造函数的可选参数。这也不是一个好的选择,因为我不想允许使用任意委托(delegate)构造我的 Derived 类。

最佳答案

您可以使用私有(private)主构造函数和公共(public)辅助构造函数来执行此操作:

class Derived private constructor(val b: Base) : Base by b {

constructor(): this(BaseImpl(42))

override fun printMessage() {
b.printMessage()
print("abc")
}
}

关于Kotlin:引用构造函数未传递的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71955194/

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