Hacer subclase que compare

Diego
08 de Abril del 2006
Me encuentro con un problema, en Java se definen dos interfaces, Comparator y Comparable, muy útiles para la comparación, así, mientras Comparable da un orden natural a los objetos de una clase, Comparator sirve para dar una ordenación alternativa, como por ejemplo, ordenar al revés, llamando a Collections.reverseOrder(), etc. Me gustaría hacer una subclase que permitiera abstraer dicha diferencia, de modo que tenga dos constructores sobrecargados, uno que se le pase un comparador y otro que no, de modo que si se pasa ordene según el criterio del compardor, pero si no, ha de garantizarse que la clase es comparable, cosa que no parece hacer la implementación del JDK. He conseguido que me funcione pero sólamente trabajando con clases que ya implementan comparable, así:

import java.util.Comparator;

public class Ordenado<E extends Comparable<E>>{

private final Comparator<E> comparador;

public Ordenado(){
this(new Comparator<E>(){
public int compare(E elem1,E elem2){
return elem1.compareTo(elem2);
}
});
}

public Ordenado(Comparator<E> comparador){
this.comparador=comparador;
}

public int compare(E elem1,E elem2){
return comparador.compare(elem1,elem2);
}
}

¿Alguien sabría cómo hacer que se pueda implementar esta clase Ordenado que funcione con todas aquellas clases que implementen Comparable y que permita pasar un Comparator a aquellas que no lo hacen?

Diego
08 de Abril del 2006
¿A nadie le ha ocurrido nunca nada parecido?

Diego
08 de Abril del 2006
¿Alguien muestra algún interés por mis preguntasq?

Diego
08 de Abril del 2006
Donde digo subclase quiero decir superclase