У меня есть абстрактный базовый класс Foo, конструктор которого я хотел бы иметь необязательный параметр. Если ничего не указано, я просто присвою ему значение None
.
Исходный Foo не будет иметь родителей, поэтому я просто хотел бы построить их без списка родителей (оставьте значение по умолчанию для родительского списка)
Производный Foo мог предоставить родителей, поэтому я хотел бы имитировать сигнатуру базового класса Foo.
Ниже моя попытка:
abstract class Foo(val id: String, var parentIds: Option[List[String]]=None) { }
case class SourceFoo(override val id: String)
extends Foo(id, parentIds=None) { }
case class DerivedFoo(override val id: String,
override var parentIds: Option[List[String]])
extends Foo(id, parentIds) { }
Я получаю сообщение об ошибке компилятора, что изменяемая переменная не может быть переопределена (ссылка на parentIds
в конструкторе DerivedFoo
.
Этот список может быть изменен, поэтому я не хочу делать его val
(что устраняет мои проблемы с компилятором).
Это очень простой объектно-ориентированный вопрос, поэтому он должен быть проще, чем мне кажется. Как я могу добиться желаемого поведения идиоматически?