dúvida em declaraçao de método

pessoal

estava pesquisando uns negócios da faculdade, até que me deparei com um método, em java, com a seguinte declaração:

public static <T extends Comparable<T>> void heapSort(T[] v) {

sei que:

public -> método público, pode ser acessado de qualquer classe
static -> método de classe, não precisa ser acessado por uma instância
void -> não retorna nada
heapSort -> nome do método

mas e aquele maldito

<T extends Comparable<T>>

o que é?

é um tipo genérico, ali diz que o parâmetro do seu método tem que ser algo que implementa um Comparable que se “compara” com ele mesmo.

Ou seja, aceita array de classes tipo:

class X implements Comparable<X> {

e não aceita array de classes tipo:

class Y implementas Comparable<X> {
ou
class Y {

qq coisa
http://www.guj.com.br/java.tutorial.artigo.142.1.guj

Se quiser saber mais a respeito:

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf