簡體   English   中英

泛型-集合排序方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM