Я хочу указать цвет животных один раз, и он одинаков для всех животных одного и того же вида.
Так что я хотел бы сделать:
abstract object Animal {val color: String}
А затем укажите отдельные цвета животных с помощью
object Dog extends Animal {val color = "green"}
Это должно быть в объекте, так как у меня уже есть соглашение, которое не может быть изменено, только делая животных с фабричным методом, также объявленным в объекте Animal, и фабричным методам нужен доступ к цвету.
например,
abstract object Animal {
val color: String
def makeAnimal(args): Animal = ...
}
Как мне на самом деле сделать это в Scala, учитывая, что "только классы могут быть объявлены, но неопределенные члены"?
Я могу придумать хакерский способ сделать это, используя черты, но я надеюсь, что есть что-то лучшее.
[EDIT]
Так что получается, что я не могу использовать черты для хранения значений / методов по сложным причинам.
Текущее решение включает в себя статическую регистрацию дочернего объекта с родительским объектом с использованием признака, и это позволяет мне получить доступ к нетрадиционным значениям и методам, которые должны быть определены в объекте. Я все еще надеюсь на лучшее решение.