Quiero especificar el color de los animales una vez, y es el mismo para todos los animales de la misma especie.¿Cómo declaras valores y métodos de objetos abstractos en scala?
Así que me gustaría hacer:
abstract object Animal {val color: String}
Y luego especificar los colores de los animales individuales con
object Dog extends Animal {val color = "green"}
Esto tiene que estar en el objeto, como ya tengo una convención que no puede haber El cambio de solo hacer animales con el método de fábrica también se declara en el objeto Animal, y los métodos de fábrica necesitan acceso al color. p.
abstract object Animal {
val color: String
def makeAnimal(args): Animal = ...
}
¿Cómo puedo hacer esto en scala, dado que "solo las clases pueden tener miembros declarados pero indefinidos"?
Puedo pensar en una forma hacky de hacer esto usando rasgos, pero espero que haya algo mejor.
[EDITAR] Resulta que no puedo usar rasgos para guardar los valores/métodos por razones complicadas. La solución actual implica el registro estático del objeto hijo con el objeto principal utilizando un rasgo, y eso me permite acceder a los valores y métodos sin carácter que deben definirse en un objeto. Todavía estoy esperando una mejor solución.