Sabe interpretar isso? ->public static <T extends Comparable<? super T>> void sort(List<T> list)

Alguém pelo amor de Deus consegue me ajudar a entender uma assinatura desta maneira:

public static <T extends Comparable<? super T>> void sort(List<T> list)

Sei que está por trás o conceito de Método Genérico, certo?

Abração a todos.
André AS

Aceita uma lista de qualquer tipo de Objeto e retorna um objeto que extenda comparable, sendo que este comparable aceita qualquer Objeto pai de T.
Sim, trata-se de generico, mas me responda, está trabalhando com isto ou foi a título de curiosidade?

P.s: verifique a questão de ? super T, vale a pena.

Abraços.

[quote=nel]Aceita uma lista de qualquer tipo de Objeto e retorna um objeto que extenda comparable, sendo que este comparable aceita qualquer Objeto pai de T.
Sim, trata-se de generico, mas me responda, está trabalhando com isto ou foi a título de curiosidade?

P.s: verifique a questão de ? super T, vale a pena.

Abraços.[/quote]

Err… não. O retorno é void.

A parte <T extends Comparable<? super T>> apenas restringe o tipo genérico que é aceitável.

Quando digo , quero dizer que o parâmetro genético T pode ser de qualquer tipo, deste que implemente a interface Comparable (caso contrário, é erro de compilação).

Camparable também possui um tipo genérico, por isso também é “generificado” na declaração acima. A expressão <? super T> quer dizer: o Comparable pode ser de qualquer tipo T ou qualquer classe pai de T ou qualquer interface que T implemente. É mais fácil de explicar com um exemplo.

Suponha uma classe chamada Animal:

public class Animal {}

A classe Gato pode ser usado no método sort

public class Gato extends Animal implements Comparable<Gato> {
    // método de Comparable
}

porque implementa Comparable, cujo tipo genérico é o mesmo da classe.

A classe Cachorro também pode ser usado

public class Cachorro extends Animal implements Comparable<Animal> {
    // método de Comparable
}

porque implementa Comparable, cujo tipo genérico não é o mesmo da classe, mas é supertipo da classe.

Agora a classe Iguana não pode ser usado

public class Iguana extends Animal implements Comparable<Fungo> {
    // método de Comparable
}

porque, apesar de implementar Comparable, seu tipo genérico não tem relação de supertipo com a classe Iguana.

Espero que tenha sido claro.

Ops…não vi o “void” ao lado do método.
Foi explicado com maiores detalhes, mas se quiser, aqui tem algo sobre Generics.

Obrigado pela correção :slight_smile: