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
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