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

Ahm*_*wan 6 delegates delegation kotlin kotlin-delegate

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

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

我可以通过简单地在子句中实例化匿名委托来完成第一个任务byclass Derived() : Base by BaseImpl(42)使用Kotlin 的文档示例)。但是,这阻止了我访问匿名委托,因为我不知道如何引用它。

我想做类似以下的事情。然而,以下内容编译时不会出现错误'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")
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实需要为班级的每个实例分配一个单独的委托Derived。因此,作为全局变量移动b对我来说不是一个选择。

我最接近我需要的是构造函数的可选参数。这也不是一个好的选择,因为我不想允许Derived用任意的代表构建我的类。

Ten*_*r04 7

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

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

    constructor(): this(BaseImpl(42))

    override fun printMessage() {
        b.printMessage()
        print("abc")
    }
}
Run Code Online (Sandbox Code Playgroud)