我有一個父類和幾個子類。我想要的是當在子類的實例上調用特定的setter方法時,父類中「同步」的布爾值被設置爲false
。應該可以創建同步或非同步狀態的子類。我在做什麼錯? (有了Scala的超類參數)
這是我想出了:現在
class A(protected var isSync: Boolean) {
}
class B(var value:String, isSync: Boolean) extends A(isSync) {
override def value_=(value:String): Unit = {
this.isSync = false
this.value = value
}
}
,這並不編譯了一些理由:value
分配給this.value
是模糊的; var
註釋已經定義了value_=
;和this.isSync
引用本地構造函數字段isSync
,而不是(可寫)父字段。 Stack Overflow上
This提問時指出,我應該使用__value
(不是value
或任何名稱)作爲構造一個private var
,並定義二傳手自己。一些修修補補後,我想出了下面的代碼可以編譯和作品:
class A(protected var isSync: Boolean) {
}
class B(private var __value: String, private val __isSync: Boolean)
extends A(__isSync) {
def value = __value
def value_=(value: String) = {
this.isSync = false
this.__value = value
}
}
然而,這個代碼感覺很餿的是現在我懷疑我在做一個(如果不是更多)根本錯誤。任何人都可以請糾正我?
因此具體的問題是:
- 是否存在(如果,這)在我想要實現的根本缺陷?對於某些情況:對象在更改時可以(並且可能必須)與服務器同步。
- 將參數傳遞給您擴展的類的正確/最佳方法是什麼?
- 覆蓋由
var
(或通常提供您自己的setter實現)生成的setter的權利/最佳方式是什麼?
謝謝!太糟糕了Scala並不簡單地允許'class X(var v:String){override def v _ =(arg:String)= ...}'! :( – wen