我想在特定的背景關系中使用Kotlin 委托。
- 委托不應在建構式中傳遞。
- 我想保留對委托的參考以供以后在代碼中使用。在我覆寫的方法中,比如說
printMessage()
,我仍然需要以與super.printMessage()
在多型繼承中呼叫相同的方式呼叫委托。
by
我可以通過簡單地在子句中實體化一個匿名委托來做第一個(class 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")
}
}
我確實需要一個單獨的代表為我的Derived
班級的每個實體。所以b
作為一個全域變數移動對我來說不是一個選擇。
我最接近我需要的是建構式的可選引數。這也不是一個好的選擇,因為我不想讓我的Derived
類的建構式具有任意委托。
uj5u.com熱心網友回復:
您可以使用私有主建構式和公共輔助建構式來執行此操作:
class Derived private constructor(val b: Base) : Base by b {
constructor(): this(BaseImpl(42))
override fun printMessage() {
b.printMessage()
print("abc")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461045.html