Java >> Java tutorial >  >> Tag >> extends

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

  1. "? udvider Type":Betegner en familie af undertyper af typen Type. Dette er det mest nyttige jokertegn
  2. "? supertype":Betegner en familie af supertyper af typen Type
  3. "?":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.


Java tag