Пожалуйста, ознакомьтесь со следующим кодом.Действия инициализации Scala
trait MyTrait { val myVal : String }
class MyClass extends MyTrait { val myVal = "Value" }
class MyClass2(val myVal: String) extends MyTrait
Почему порядок инициализации отличаются в случае MyClass
и MyClass2
? Конструктор MyClass
будет как
MyClass() {
MyTrait$class.$init$(this);
myVal = value
}
Конструктор MyClass2
будет
MyClass2(String myVal) { this.myVal = myVal; MyTrait$class.$init$(this) }
Я думаю, что порядок инициализации должен быть MyClass2
«s конструктор делает, то же самое для обоих случаев.
В конце концов я видел причину, по которой Scala инициализирует объект в этом порядке. Спасибо за ответ, Дэниел. – Dmitry