Kotlin:引用构造函数未传递的委托
Kotlin: referring to delegate that is not passed by constructor
我想在特定上下文中使用 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
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")
}
}
我想在特定上下文中使用 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
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")
}
}