我正在學習Scala,我正在嘗試將一些設計模式的代碼從Java轉換爲Scala,但我失去了一些細節。「抽象類沒有參數」:爲什麼?
例如,現在我寫一個簡單的國家但我收到三宗在編譯時相同的錯誤:
這是代碼
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
閱讀文檔,它喜歡不正確地使用特徵,但我沒有使用特徵!
的狀態σ和StateB是實現類類Statelike的,什麼是抽象的。 不多不少。
我的代碼錯在哪裏?過多的「Java風格」繼承? Waht可以成爲解決方案嗎?
在此先感謝
我猜你[R試圖FDO是讓getter和setter方法明確,嘗試,而不是'state_contest.myState(新狀態σ)''state_contest.myState =新StateA' – 4lex1v