Hvordan kommer generisk typeparameter, der siger udvider Sammenlignelig ikke implementerer?
Dette er blot den konvention, der er valgt for generiske lægemidler. Når du bruger afgrænsede typeparametre, bruger du udvider (selvom det kan betyde redskaber i nogle tilfælde) eller super.
Du kan endda gøre noget som <E extends Comparable<E> & Cloneable>
for at definere, at objektet, der erstatter typeparameteren, skal implementere begge disse grænseflader.
Hvis du vil bruge den ting, der implementerer, skriver du bare som en generisk parameter
class Bar extends Foo<String> { /* Code */}
Jokertegnet, som du taler om, er tre
- "? udvider Type":Betegner en familie af undertyper af typen Type. Dette er det mest nyttige jokertegn
- "? supertype":Betegner en familie af supertyper af typen Type
- "?":Angiver sættet af alle typer eller nogen
Din metode skal se ud som
public static <T extends Comparable<? super T>> Collection<T> sort(T[] list) {
Collection<T> list = new ArrayList<T>();
//do quicksort
Arrays.sort(arr);
Collection<T> list = new ArrayList<T>();
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
//btw how do You know that last is not duplicate
return list;
}
Besøg denne side for detaljer.