[英]Generics - Collections sort method
當使用具有List<Employee>
Collections.sort(List<T> list)
,其中Employee
是一個不擴展Comparable
接口的類。
然后我看到以下編譯錯誤
類型
Collections
的方法sort(List<T>)
不適用於參數(List<Employee>
)。
我不明白為什么T
應該實現Comparable
,在sort
方法的方法參數中的任何地方都沒有指定T
更新:請停止投票。 我一直認為只有方法參數才能確定要作為參數傳遞的內容,但是我看到<T extends Comparable<? super T>>
方法簽名中的<T extends Comparable<? super T>>
,但我在任何方法簽名中都看不到。 訪問修飾符,是否為靜態,返回類型,方法名稱對我來說是已知的,但是額外的一個是什么?
更新:我不知道這一點:“所有通用方法聲明的類型參數部分均由方法返回類型之前的尖括號(<和>)分隔”
這是完整的簽名:
public static <T extends Comparable<? super T>> void sort(List<T> list)
如您所見, T
必須實現Comparable
否則sort()
如何知道如何對List<T>
進行排序
public static <T extends Comparable<? super T>> void sort(List<T> list)
如果您不知道哪個雇員比另一個雇員大,就無法排序。 只需添加自定義比較器即可。
對於原始數據類型(例如int,long,float等),預定義了比較。 排序采用預定義的比較措施並對變量進行排序。
但是,當您創建一個類時,一個類可以由許多不同的原始類型甚至其他對象組成。 Java無法自動知道如何進行比較,因此它需要擴展可比較的接口並定義用於指定排序方式的函數。 例如
Class car {
int id;
String name;
String company;
}
實施可比性后,您可以定義您的排序是否取決於汽車的ID,其名稱或公司名稱。 希望這可以消除需求。
對於泛型,有兩種方法:1.通配符和2.Bounded類型參數。
通配符示例: public void sort(List<? extends T> list)
有界類型的示例: public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T extends Comparable<? super T>> void sort(List<T> list)
像上面的示例一樣,當需要多次使用`T時,最好使用有界類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.