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

Kotlin: referring to delegate that is not passed by constructor

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

我可以通过在 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 class 的每个实例确实需要一个单独的委托。因此,将 b 作为全局变量移动对我来说不是一个选项。

最接近我需要的是构造函数的可选参数。这也不是一个好的选择,因为我不想让我的 Derived class 的构造函数具有任意委托。

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

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

    constructor(): this(BaseImpl(42))

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