私は親クラスといくつかの子クラスを持っています。私が望むのは、特定のセッターメソッドが子クラスのインスタンスで呼び出され、親クラスの "同期された"のブール値が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
}
}
、これはいくつかの理由でコンパイルされません。this.value
へvalue
の割り当ては曖昧です。 var
アノテーションは既にvalue_=
を定義しています。 this.isSync
は、(書き込み可能な)親フィールドの代わりにローカルコンストラクタフィールドisSync
を参照します。スタックオーバーフローの
This質問は、私は、コンストラクタでprivate var
として__value
(value
ではないか、任意の名前)を使用し、セッターを自分で定義する必要があることを指摘しました。しかし、このコードは、今では私は(もっとない場合)基本的なミスを作ってるんだ疑うほど悪臭感じ
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
によって生成されたセッターをオーバーライドする(または通常は独自のセッターの実装を提供する)正しい/最善の方法は何ですか?
ありがとうございました! Scalaは単純に 'class X(var v:String){override def v _ =(arg:String)= ...}'を単純に許可しません。 :( – wen