Ho cercato di scrivere funzione generica che rimuove gli elementi duplicati da matrice.Come mai il parametro di tipo generico dice "estende" Paragonabile non "implementa"?
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;
}
Come si può vedere non è possibile passare tipo primitivo come int [] array dal momento che sto paragonando elementi da compareTo() metodo che definito nella interfaccia Comparable.
ho notato la prima linea (dichiarazione di metodo):
public static <E extends Comparable<E>> ArrayList<E> removeDuplicate(E[] arr) {
Come mai si dice "si estende comparabile"?
Comparabile è un'interfaccia, quindi perché non "implementare Comparabile"? Questa è la prima volta che scrivo la funzione generica, quindi sono un po 'confuso su tali dettagli. (qualsiasi dubbio potrebbe impedirmi di capire ..)
MODIFICA: trovato questo articolo correlato.
http://www.tutorialspoint.com/java/java_generics.htm
perché "extends extends extends' –
Possibile duplicato di [generics Java: perché" estende T "consentito ma non" implementa T "?] (Http://stackoverflow.com/questions/976441/java-generics-why -is-extends-t-allowed-but-not-implements-t) – Lii