我試圖寫的通用函數,刪除數組中重複的元素。泛型類型參數如何表示「擴展」可比較不「實現」?
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
//do quicksort
Arrays.sort(arr);
ArrayList<E> list = new ArrayList<E>();
int i;
for(i=0; i<arr.length-1; i++) {
if(arr[i].compareTo(arr[i+1]) != 0) { //if not duplicate, add to the list
list.add(arr[i]);
}
}
list.add(arr[i]); //add last element
return list;
}
正如你可以看到,因爲我通過的compareTo,在可比接口定義()方法比較元件不能傳遞原始類型如int []數組。
我注意到的第一行(方法聲明):
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
爲什麼它說: 「伸出可比」?
可比的接口,所以它爲什麼不是「落實可比」?這是我第一次編寫泛型函數,所以我對這樣的細節有點困惑。 (任何懷疑會阻止我的理解..)
編輯:發現這篇文章涉及到這個話題。
http://www.tutorialspoint.com/java/java_generics.htm
因爲'implements extends extends' – 2010-07-24 20:39:33
[Java泛型 - 爲什麼是「擴展T」而不是「實現T」?](http://stackoverflow.com/questions/976441/java-generics-why -is-延伸叔允許的但不-器具-T) – Lii 2016-01-22 09:07:44