由於Comparable
僅導出一個函數,並且因爲that function只接受一個類型爲「this」的參數(實現Comparable的類),爲什麼Comparable參數化?鑑於Comparable用於自然排序,爲什麼有人會傳遞與實現此接口的類不同的類?爲什麼Comparable參數化?
0
A
回答
3
那麼,當你想到是什麼消耗吧。例如:
public <T extends Comparable<T>> void sort(List<T> list)
這樣,你可以調用一個類型安全的方式item.compareTo(otherItem)
,只要兩者都T
。
同樣,當實施它,你可以寫:的
public int compareTo(MyClass other)
,而不必使用:
public int compareTo(Object other)
,然後澆注。
所以是的,實現Comparable<SomethingElse>
會很奇怪 - 但是沒有其他方式以通用的方式引用「實現此接口的類型」,並且能夠表達「其他」乾淨地部分。
2
你可以有兩種類型X
和Y
都是Comparable<B>
。只要X
和Y
擴展(或實現B
),您可以自由交叉比較這些對象。
理論上你甚至可以寫一個類W
即Comparable<V>
。這意味着您可以將其與V
進行比較,但是而不是與W
的其他實例進行比較。我目前無法想到一個很好的用例,但這是可能的。
1
AFAIK,這是唯一可以說T是與自身相似的方式。
他們可以添加一些速記來表達這一點,我懷疑它不會有任何縮短。
0
Rajikumar,你已經回答了你的問題。 Comparable對於保證類型安全是通用的,並確保你給出了正確類型的參數,這是實現Comparable的類。
0
使用此參數,您不需要使用instanceof運算符。
Comparable常用於比較對象的實例是否與另一個實例相對應。例如,如果你想現在如果一個DogA和DogB是一樣的,你就知道沒有人是一隻貓。所以你永遠不會看到一隻貓是不是狗,因爲它們有不同的起源。這
相關問題
- 1. 爲什麼ServiceReference實現Comparable?
- 2. 將Comparable從Comparable轉換爲Comparable?
- 3. 爲什麼scala.xml.Atom類型參數化?
- 4. 什麼是參數化?
- 5. Java中的接口Comparable比較什麼?
- 6. 將java ArrayList <Comparable>轉換爲Comparable []
- 7. 爲什麼要用-1作爲參數實例化Date?
- 8. 爲什麼不優化火車數據集上的超參數?
- 9. 爲什麼我無法初始化通用參數和數組?
- 10. 爲什麼doxygen會截斷參數化的宏函數屬性?
- 11. 爲什麼Unity找不到我的參數化構造函數?
- 12. 爲什麼switch-case語句在Equality-Comparable類上不允許?
- 13. 爲什麼Arrays.sort採用Object []而不是Comparable []?
- 14. 何時以及爲什麼我們必須實現Comparable接口?
- 15. 我不明白爲什麼我的「Comparable」接口不工作
- 16. 爲什麼HashMap使用TreeNode而不是Comparable鍵?
- 17. 爲什麼我的對象沒有實現Comparable排序?
- 18. 什麼部分是參數化類型?
- 19. 參數化類型是什麼意思?
- 20. 什麼是參數化調用類
- 21. 什麼是「現在」的ADO.net參數化?
- 22. 爲什麼函數沒有參數化返回類型,因爲它有參數化輸入?
- 23. 爲什麼Java的TreeSet沒有指定它的類型參數必須擴展Comparable?
- 24. 爲什麼參數被解析爲bool?
- 25. 爲什麼參數變量爲空?
- 26. 爲什麼auth_key參數爲空?
- 27. 爲什麼我的參數化查詢不起作用?
- 28. 爲什麼JList參數化在Java中不兼容?
- 29. 爲什麼不檢測我的參數化類的類型?
- 30. 爲什麼初始化列表不能用作參數?
缺少了幾個問號:)) – moonwave99