2012-02-21 75 views
2

考慮使用Java這些排序功能:Java類型參數VS參數

public static <T extends Comparable<? super T>> void sort(T[] a){ 

} 

VS

public static void sort(Comparable[] a){ 

} 

有間你如何使用這些方法有什麼區別?例如,兩個方法都可以採用一個超類實現可比較子類的對象嗎?

我注意到,對於第二個方法Eclipse編輯器抱怨與此消息的功能定義: 「可比是一個原始類型引用泛型類型可比應進行參數設置。」

回答

4

第一種確保了陣列的所有元件與各相媲美的其他。第二個只確保所有元素都實現Comparable。

您可以傳遞包含整數,字符串和日期實例到所述第二方法的陣列,但不能與所述第一個。第一個類型更安全。

0

第二,因爲編譯器會告訴你,沒有參數的泛型類型。但是,您可以只寫

public static void sort(Comparable<?>[] a) { 
} 

這將關閉編譯器。

除了前者阻止您傳入一個實現Comparable的破壞對象數組(其中X不在該類的超類鏈中)之外,兩者在用法上並沒有實際差別。 (Y類實現可比)

在實施方面,存在這樣的一個重要區別您限於理智使用T.