La frase <? super T>
è un jolly e implica che, di classe BinarySearchTree può prendere:
a. un parametro di tipo (T) che si estende Comparabile
b. ed anche può prendere un sottotipo (S) il cui genitore estende comparable
Il costrutto <? super T>
estende utilità di classe BinarySearchTree a tipo (s) che implementa Comparable ei suoi sottotipi.
seguito frammento di codice dimostra questo:
// Below declaration of Helper class doesn't uses the wildcard super
class Helper<T extends Comparable<T>> {
// some helper methods
}
abstract class Animal implements Comparable<Animal> {
public int compareTo(final Animal o) {
// implementation ...
}
// other abstract methods
}
class Mammal extends Animal {
// implement abstract methods
}
Con la dichiarazione dichiarazione Helper<Animal> x = new Helper<Animal>()
funziona bene sopra.
Ma la dichiarazione: Helper<Mammal> x = new Helper<Mammal>()
dà l'errore di compilazione
parametro type Mammifero non è nel suo legato
(la versione del compilatore è javac 1.5.0_06)
Se la dichiarazione della classe di supporto viene modificato in seguito modulo:
class Helper<T extends Comparable<? super T>> {
// some helper methods
}
quindi la dichiarazione Helper<Mammal> x = new Helper<Mammal>()
non fornisce alcun errore del compilatore.
Quindi l'utilizzo del carattere jolly massimizza l'utilità della classe.
Questo è anche un utile asnwer grazie – gingergeek