Hacer subclase que compare
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?
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?
