Sort com Generics [Resolvido]

Oi pessoal.

Estou tentando ordenar uma listinha que uso numa aplicação Web mas estou esquecendo algum detalhe.

O código é mais ou menos o seguinte.

[code]
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class sorteando {

public static void main(String[] args) {
	
	List<SelectItem<EntidadeQualquer>> lista = new ArrayList<SelectItem<EntidadeQualquer>>();
	
	lista.add(new SelectItem(2));
	lista.add(new SelectItem(3));
	lista.add(new SelectItem(1));
	
	Collections.sort(lista);
	
	System.out.println(lista);
	
}

}

class SelectItem{

private int value = 0;

public SelectItem(int value) {
	this.value = value;
}

@Override
public String toString() {
	return String.valueOf(this.value);
}

}

class EntidadeQualquer{

}[/code]

Bom, esse código tem um erro de compilação no comando Collections.sort(lista);

O Eclipse me soltou a seguinte mensagem.

[quote]Multiple markers at this line
- Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (List<SelectItem>). The inferred
type SelectItem is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

O ponto aqui é que é necessário que o SelectItem implemente a interface Comparable. Fico na dúvida de como proceder com a codificação. Não sei se uso generics tipo Comparable.

Estou confuso com essa situação. Alguém tem opinião sobre?

Abraço!

Bound: Incompatibilidade de tipo O método genérico ( lista de coleções tipo não é aplicável para os argumentos (List <ItemSeleção >. O inferida
tipo ItemSeleção não é um substituto válido para a T <delimitada parâmetro estende <comparáveis? Super T>>

:arrow: http://www.java2s.com/Code/Java/Generics/Generic-Collection.htm

Veja alguns exemplos, no link acima !!!

Esse erro está ocorrendo porque você não está implementando a interface Comparable em SelectItem.
Faz esse teste.
Abs.

[code]private static class CountryCodeComparator
implements Comparator
{
public int compare(SelectItem item1, SelectItem item2)
{
return item1.getLabel().compareTo(item2.getLabel());
}
}

And then you have to make sure your List is of the necessary type when you create it:

List countryCodeList = new ArrayList();

Then you just make your Collections.sort call with no worries:

Collections.sort(countryCodeList, new CountryCodeComparator());
[/code]

Entendi galera.

Tentei fazer o SelectItem implementar Comparable mas não ficou da forma como eu queria. Afinal, o SelectItem pode perder a comparabilidade se eu enfiar um Comparable. O compareTo vai ficar preso ao EntidadeQualquer. Do contrário, se eu não passar nada no Comparable ou mesmo colocar um E, vou ter que usar um instance of para descobrir qual comparação realizar.

Talvez a solução mais limpa seja declarar anonimamente um Comparator tipo …sort(lista, new Comparator(){…}

Agradeço a atenção pessoal. Obrigado.