Dúvida sobre trecho de código: "<E extends Comparable<? super E>"

3 respostas
Z

Bom dia, pessoal :lol:

Tenho o seguinte código (Comb sort), mas ainda não entendi bem o que faz este treço:

public static <E extends Comparable<? super E>> void sort(E[] input)

Alguém pode me explicar ou falar o que devo estudar para entendê-lo?

Segue o código completo:

public static <E extends Comparable<? super E>> void sort(E[] input) {
    int gap = input.length;
    boolean swapped = true;
    while (gap > 1 || swapped) {
        if (gap > 1) 
            gap = (int) (gap / 1.247330950103979);
 
        int i = 0;
        swapped = false;
        while (i + gap < input.length) {
            if (input[i].compareTo(input[i + gap]) > 0) {
                E t = input[i];
                input[i] = input[i + gap];
                input[i + gap] = t;
                swapped = true;
            }
            i++;
        }
    }
}

Obrigado. :smiley:

3 Respostas

nel
public static <E extends Comparable<? super E>> void sort(E[] input)

Bom dia!
Isso é Generics amigo, está dizendo que tem um método void que aceita como parametro de entrada um tipo de objeto E.

E restringe esse objeto E, dizendo que ele deve extender o Objeto Comparable, cujo comparable diz que um objeto deve ser um super de E.
Algo como:

public static <ObjetoFilhoDeComparable extends Comparable<ObjetoPaidoObjetoFilhoDeComparable super ObjetoFilhoDeComparable >> void sort(E[] input)

Edit: apenas me corrigindo, o objeto E não precisa ser filho direto de Comparable (extends Comparable), pode ser filho de um filho de Comparable e assim por diante.

Ao meu entender, é exatamente isso.
Abraços!

Z

obrigado, nel.

Entendi o conceito e encontrei mais algumas informações neste tópico:

[]'s! :smiley:

FernandoFranzini

Tem que estudar generics meu querido. Sugiro vc pegar um livro qualquer de SCJP que ja deve ser suficiente.
A paz :smiley:

Criado 17 de maio de 2011
Ultima resposta 17 de mai. de 2011
Respostas 3
Participantes 3