ventana una sirven que para ejemplos crear codigos codigo calculadora basicos java lambda java-8 comparator functional-interface

java - una - jframe netbeans



¿Por qué el comparador declara iguales? (8)

La interfaz del comparador tiene su propio método equals() . Cualquier clase obtendrá equals() por defecto a través de la clase Object. ¿Cuál es la necesidad de tener el método equals() dentro de una interfaz?


De las documentations Java, la razón por la cual Comparator tiene su propio método equals() :

Sin embargo, anular este método puede, en algunos casos, mejorar el rendimiento al permitir que los programas determinen que dos comparadores distintos imponen el mismo orden.


El método equals() en Comparator se proporciona para obligar a un usuario a implementar la interfaz de Comparator a implementar equals() con algunas reglas y restricciones adicionales además de las que ya se aplicaron en equals() de Object .

La regla adicional es:

Este método debe obedecer el contrato general de Object.equals (Object) . Además, este método puede devolver verdadero solo si el objeto especificado es también un comparador e impone el mismo orden que este comparador. Por lo tanto, comp1.equals (comp2) implica que sgn (comp1.compare (o1, o2)) == sgn (comp2.compare (o1, o2)) para cada referencia de objeto o1 y o2 .


Lee su javadoc . Está ahí solo para explicar qué debe devolver equals() si usted decide anularlo en una clase que implementa Comparator. Podría pensar que ningún comparador puede ser igual a otro, pero no es el caso. Podría pensar que dos comparadores son iguales si devuelven lo mismo para cualquier argumento, pero no es el caso. El javadoc explica que dos comparadores son iguales si imponen el mismo orden, independientemente de los argumentos dados. El javadoc también dice:

Tenga en cuenta que siempre es seguro no anular Object.equals (Object)

La mayoría de las veces, no reemplaza a equals() en los comparadores.


Poner un método Object en una declaración de interfaz permite que Javadoc tenga la obligación de tener el significado que es igual a tener en las clases que implementan la interfaz.


Técnicamente, la declaración del método es redundante (al compilador no le importa), pero ...

La declaración del método equals en esta interfaz hace que sea parte del contrato entre la persona que llama y diferentes comparadores y le permite especificar / extender su semántica.

Especifica que dos comparadores son iguales solo si imponen el mismo ordenamiento con su método compare (). Esto amplía la semántica de Object.equals () y, por lo tanto, debe documentarse en la interfaz.


de los documentations :

siempre es seguro no anular Object.equals (Object). Sin embargo, anular este método puede, en algunos casos, mejorar el rendimiento al permitir que los programas determinen que dos comparadores distintos imponen el mismo orden .


Comparator refina el contrato de Object.equals : debe satisfacer las restricciones establecidas por Object.equals y algunas de ellas .

Además, este método puede devolver verdadero solo si el objeto especificado es también un comparador e impone el mismo orden que este comparador. Por lo tanto, comp1.equals(comp2) implica que sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2)) para cada referencia de objeto o1 y o2 .

Declarar un equals dentro de Comparator permite documentar esto en forma de javadoc.

Tenga en cuenta que la documentación de la API también sirve como contrato, por lo que no se trata solo de cosméticos aquí. Es restricciones explícitas que otro código y su código pueden confiar.

En situaciones similares en las que tiene métodos menos establecidos, también puede servir como documentación de un intento. Es decir, Interface.method debería estar allí, independientemente de cómo evolucionen sus super interfaces.


Comparator interface have their own equals() method

Bien,. En primer lugar, debe quedar claro que siempre que implemente una interfaz comparable debe proporcionar su programa para decidir cuándo los objetos son iguales, menores o mayores.

I am quite confuse about have equals() inside Comparator. Any class will get equals() by default through Object class.

La implementación del método equals () u heredada de la clase Object solo verifica si las dos referencias apuntan al mismo objeto o no. No se aplica ninguna comparación. Es usted quien proporcionará en su clase (o posiblemente en su interfaz) los criterios para que los objetos sean iguales.

Then what is need to have equals() method inside an interface?

Obviamente, cada vez que implementas cuando los objetos son menores, mayor que lo que debes implementar cuando son iguales. así que en lugar de confiar en el método por defecto de Object equals () debe proporcionar su lógica para verificar la igualdad