私は Scala を勉強していて、ある設計パターンのコードを Java から Scala に翻訳しようとしていますが、細部が失われています。
たとえば、単純なStateを記述したところ、コンパイル時に同じエラーが 3 回発生しました。
これがコードです
abstract class Statelike {
def writeName(STATE_CONTEXT : StateContext , NAME : String): Unit
}
class StateA extends Statelike {
override def writeName( STATE_CONTEXT : StateContext , NAME : String) : Unit = {
println(NAME.toLowerCase());
STATE_CONTEXT.myState(new StateB) **//same error**
}
}//end StateA
class StateB extends Statelike {
var count = 0;
override def writeName( state_contest: StateContext , name: String) : Unit = {
println(name.toUpperCase());
count+1;
var conto2 = count;
if (conto2 > 1) {
state_contest.myState(new StateA) **//same error**
}
}
}//StateB
class StateContext {
var state : Statelike = null
def StateContext() {
myState(new StateA) **//same error**
}
def myState_=(s1 : Statelike ) = {state = s1}
def myState : Statelike = state
def writeName ( NAME : String): Unit = {
myState.writeName(this, NAME);
}
}//end StateContext
object TestClientState {
def main( args : Array[String]) {
var SC = new StateContext();
SC.writeName("Monday");
SC.writeName("Tuesday");
SC.writeName("Wednesday");
SC.writeName("Thursday");
SC.writeName("Friday");
SC.writeName("Saturday");
SC.writeName("Sunday");
}
}
エラーの発生は次のとおりです。
State.scala:12: error: Statelike does not take parameters
STATE_CONTEXT.myState(new StateB)
^
State.scala:26: error: Statelike does not take parameters
state_contest.myState(new StateA)
^
State.scala:37: error: Statelike does not take parameters
myState(new StateA)
^
three errors found
ドキュメントを読むと、特性の不適切な使用が好きですが、私は特性を使用していません!
StateAとStateBは、抽象クラスであるStatelikeクラスの実装クラスです。それ以上でもそれ以下でもありません。
私のコードエラーはどこですか? 「Java スタイル」の継承が多すぎますか? 何が解決策になりますか?
前もって感謝します