Proszę spojrzeć na poniższy kod.Działanie inicjujące Scala
trait MyTrait { val myVal : String }
class MyClass extends MyTrait { val myVal = "Value" }
class MyClass2(val myVal: String) extends MyTrait
Dlaczego kolejność inicjalizacji różnią się w przypadku MyClass
i MyClass2
? Konstruktor MyClass
będzie tak
MyClass() {
MyTrait$class.$init$(this);
myVal = value
}
Konstruktor MyClass2
będzie
MyClass2(String myVal) { this.myVal = myVal; MyTrait$class.$init$(this) }
myślę kolejność inicjalizacji powinien być jak konstruktor MyClass2
„s robi, taka sama dla obu przypadków.
W końcu widziałem powód, dla którego Scala inicjuje obiekt w tej kolejności. Dzięki za odpowiedź, Daniel. – Dmitry