給定一個類層次結構,如:如何避免具有繼承性的不可變數據模型中的代碼重複?
Entity { id, name, position }
Combatant : Entity { health, strength }
Avatar : Combatant { connection }
裏面全是不可改變的。
要在一個實體上實現'移動',我可以返回一個新實體的位置不同。
Entity Move(p) { return new Entity(id, name, p); }
但是,如果我在頭像上調用'移動',我會得到一個實體,而不是頭像。所以我必須在所有不可變類上實現'移動'。有沒有辦法避免這種情況,或更好的解決方案?
本質上,你建議我克隆和設置,它工作得很好,沒有任何泛型...我錯過了泛型部分重要的東西? – 2011-04-17 03:16:12
@Timothy - 您可以不使用泛型,但返回類型將是實體,而不是具體的子類型。你必須做一個不安全的演員,通過使用上述方法可以避免 – NightDweller 2011-04-17 09:08:01
哦,我明白了。我並不太在意返回類型,只要對象被保留,但要牢記在心,謝謝! :)回想起來,我認爲我的問題有點被誤導,因爲真正絆倒我的是被返回的對象,而不是函數簽名。 – 2011-04-19 00:24:45