5
我想指定动物颜色一次,并且对于同一物种的所有动物都是相同的。如何在scala中声明抽象对象的值和方法?
所以我喜欢做的事:
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中做到这一点,因为“只有类可以有声明但未定义的成员”?
我可以想到一个哈克的方式来做到这一点使用特质,但我希望有更好的东西。
[编辑] 所以事实证明,我不能使用特征来保存值/方法的复杂原因。 当前的解决方案涉及使用特征向父对象静态注册子对象,并允许我访问必须在对象中定义的非特征值和方法。我仍然希望有更好的解决方案。