Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Problemas que tengo con la interfaz comparable

Buenas noches, tengo una duda al respecto tengo dudas en la logica/abstraccion con comparable.

En el desafio de "Java:trabajar con listas y colecciones de datos", cuando se utiliza la parte del codigo

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

No logro entender la lógica detras de esto. Lo que yo entiendo seria que primero se castea el valor a Double, para poder utilizar.comparTo, utilizando el método de la clase Double, pero no logro entender que lógica se ejecuta detrás de esto. ¿Solo son ifs? o ¿que más hay dentro de este método? ¿Que pasa si quiero cambiar la manera de ordenarlo? ¿Hay alguna manera de hacerlo o tiene que ser manual?

Aquí abajo se encuentra la imagen de otro compareTo, que no logro entender. En mi lógica esto crearía una recursividad infinita al estar llamando compareTo.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Agradeceria que me pudieran orientar. De antemano gracias por la ayuda.

1 respuesta

Hola Armando,

Lo que estan haciendo aqui es algo que se le denomina Autoboxing Manual. Recuerda que los tipos de datos primitivos no pueden implementar interfaces. No recuerdo exactamente el ejercicio pero es probable que this.valor sea un primitivo(double con d minúscula) los primitivos no tienen métodos al castearlo a con Double ( en mayuscula ) adquiere todos los métodos de esa clase y también puede implementar el compareTo.

No estoy del todo seguro pero me parece que puedes usar el autoboxing automático seria algo asi.

@Override
public int compareTo(Compra otraCompra) {
    return Double.compare(this.valor, otraCompra.getValor());
}

Sobre la segunda pregunta.

El método compareTo de la clase Double se utiliza para comparar los dos valores. Si el valor de this es mayor, devolverá un número positivo; si es menor, devolverá un número negativo; si son iguales, devolverá 0. Va a hacer iteraciones hasta que ordene todo con esta metodología no deberia ser infinito.

Si te ayude a aclarar la duda no te olvides marcar como solucionado.