我不明白如何使用繼承模擬genericy,我正在諮詢Bertand Meyer的文章「Genericity versus Inheritance」,但我仍然不明白。我會補充一個更清楚的解釋。如何使用繼承來模擬泛型?
2
A
回答
0
在一般情況下,你不能這樣做。這就是爲什麼面向對象的語言將模板和泛型添加到其中的原因。例如,在引入模板之前,所有嘗試在C++中創建通用容器失敗或幾乎完全無法使用的嘗試。
1
在一些編程語言中,您可以使用抽象類型成員的繼承來模擬genericy。 這是一個使用scala的例子。即使你不知道Scala也應該可以理解。
class Collection {
type T;
//all methods are using T for the contained type.
}
我不確定,但在C++類型將是typedef。 按照這一辦法,你可以通過子類型集合並指定類型T於獲取與A型的元素集合:
class IntCollection extends Collection {
type T = Int;
//...
}
該解決方案具有相對於仿製藥或模板一些不足之處,但也提供了好處。 如果你有興趣,然後考慮閱讀:http://www.artima.com/weblogs/viewpost.jsp?thread = 270195 抽象類型成員與通用類型參數在斯卡拉。 再次,你不需要知道scala來理解帖子。 編輯:引用一句話: 至少原則上,我們可以將每種參數化形式表示爲面向對象抽象的形式。 希望有幫助
1
只有靜態類型語言(或帶有類型提示的類型)才需要泛型 - 因爲您不想失去幾乎沒有獲得的類型安全性。
如果你的(靜態)語言沒有它們,那麼可能是考慮不同的一種了 - 使用繼承進行模擬是很醜陋的。
或更好 - 考慮動態語言和測試驅動開發。你將獲得更多的權力(所有東西都是通用的,不需要輸入),測試將代表你的合同 - 包括具體的例子 - 這是最好的類型安全抽象根本無法做到的。 (因爲它是抽象的)
相關問題
- 1. 如何使用繼承的泛型?
- 2. 使用繼承與泛型
- 3. 如何用泛型方法繼承類?
- 4. JAVA:泛型類繼承和泛型類型繼承
- 5. 繼承和泛型
- 6. 繼承和泛型
- 7. 泛型和繼承
- 8. 繼承泛型類
- 9. Java泛型繼承
- 10. Kotlin泛型繼承
- 11. 繼承與泛型
- 12. 泛型類型和繼承
- 13. 繼承和泛型類型
- 14. 泛型類型的繼承
- 15. C#泛型類型繼承
- 16. 使用泛型與LINQ繼承
- 17. 使用繼承時排除泛型
- 18. 如何繼承在C#。我泛型類
- 19. 如何檢查繼承泛型與繼承PARAMETER_
- 20. 如何繼承或使用燼數據繼承其他模型的模型
- 21. 泛型類繼承其通用型
- 22. 泛型中的繼承
- 23. Java泛型繼承警告
- 24. C++泛型類和繼承
- 25. Java中的泛型繼承
- 26. 多泛型類繼承
- 27. Java繼承和泛型
- 28. 繼承和泛型C#
- 29. 繼承泛型類C#
- 30. java繼承vs泛型
如果我使用指向基本類的指針來概括其派生類的功能,會發生什麼? – 2011-06-14 07:41:30
@two_d不知道 - 但這不是一般意義上的通用性。 – 2011-06-14 07:48:11