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中做到這一點,因爲「只有類可以有聲明但未定義的成員」?
我可以想到一個哈克的方式來做到這一點使用特質,但我希望有更好的東西。
[編輯] 所以事實證明,我不能使用特徵來保存值/方法的複雜原因。 當前的解決方案涉及使用特徵向父對象靜態註冊子對象,並允許我訪問必須在對象中定義的非特徵值和方法。我仍然希望有更好的解決方案。