La frase <? super T>
es un comodín e implica que, clase BinarySearchTree puede tomar:
a. un parámetro de tipo (T) que se extiende Comparable
b. y también puede tomar un subtipo (S) cuya matriz se extiende Comparable
El constructo <? super T>
se extiende utilidad de clase BinarySearchTree a tipo (s) que implementa Comparable y sus subtipos.
A continuación fragmento de código demuestra esto:
// 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 declaración sobre la declaración Helper<Animal> x = new Helper<Animal>()
funciona bien.
Pero la declaración: Helper<Mammal> x = new Helper<Mammal>()
da el error de compilación
parámetro de tipo de mamífero es no dentro de su límite
(la versión del compilador es javac 1.5.0_06)
Cuando se cambia la declaración de la clase auxiliar a continuación formulario:
class Helper<T extends Comparable<? super T>> {
// some helper methods
}
entonces la instrucción Helper<Mammal> x = new Helper<Mammal>()
no da ningún error de compilación.
Por lo tanto, el uso de caracteres comodín maximiza la utilidad de la clase.
Esto también es útil asnwer gracias – gingergeek