Я изучаю 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
чтение документа, ему нравится неправильное использование признаков, но я не использую черты!
StateA и StateB является классом реализации класса Statelike, что абстрактно. Нет больше, не меньше.
Где мой код ошибки? Слишком много наследования «Java-style»? Может быть решение Waht?
Заранее спасибо
Я предполагаю, что вы ¨R пытается ФРО, делают методы получения и установки явно, попробуйте вместо 'state_contest.myState (новый StateA)' 'state_contest.myState = новый StateA' – 4lex1v