Итак, я хочу создать абстрактную модель наследования с использованием признаков. Я думаю, что пример кода работает лучше всего, поэтому я создал эту небольшую витрину, чтобы представить свою проблему.Scala abstract inheritance
trait Animals{
val owned: Seq[Animal]
type Animal <: TAnimal
trait TAnimal {
def name : String
}
}
Пока все хорошо. Теперь у меня есть еще одна черта «Собаки». Собаки сколы, поэтому у них есть идентификационный номер. Также я хочу реализовать последовательность, содержащую всех собак, которые у меня есть (скажем, у меня есть 5 собак со случайными именами и случайная идентификация для простоты).
trait Dogs extends Animals{
type Dog <: TDog
val owned = ???
trait TDog extends TAnimal {
def identNo : Int
}
}
Проблема в том, что животные или собаки являются только типами, я не могу создавать конкретные экземпляры из них. Я думаю, что могу использовать что-то вроде Seq.fill, но я не могу создать соответствующее выражение.
Спасибо, что действительно помогло. Пока не знал о шаблоне пирога. Btw. Мне очень нравится ваш пример =) – norathem