Cuando implementamos un Interface
tenemos inject (or accept)
el contrato definido por la interfaz.
Equalable
& Hashable
son dos contratos diferentes. Pero si echamos un vistazo de cerca, entonces veremos que ambos dependen el uno del otro, lo que significa que son parte de un single interface
, algo así como EqualableAndHashable
.
Ahora la pregunta obvia es si deberían formar parte de esta nueva interfaz EqualableAndHashable
o Object
?
Vamos a descubrirlo. Tenemos == (equal operator)
para verificar la igualdad de dos objetos. El operador ==
confirma si los valores/referencias son iguales para dos primitivas/objetos diferentes. Pero no siempre es posible responder simplemente consultando con el operador ==
.
Ahora pregunta si esta igualdad, which is also a contract
, se debe inyectar a través de interfaces o parte de la clase Object?
Si echamos un vistazo, no podemos simplemente decir algo como:
TypeX
no garantiza la igualdad de contrato.
Se convertirá en un caos si algunos tipos de objetos ofrecen igualdad y otros no. Lo que significa que el objeto de TypeX
debe respetar el contrato de igualdad, que también es cierto para todos los demás tipos de objetos. Por lo tanto, no debe inyectar igualdad desde una interfaz, porque la igualdad debe ser la parte del contrato para cualquier objeto por defecto, de lo contrario creará caos.
Así que necesitamos objetos para llegar a la implementación de equals
. Pero no puede implementar solo el método equals
, también necesita implementar el método hashcode
.
Eche un vistazo [aquí] (http://msmvps.com/blogs/jon_skeet/archive/2008/12/05/redesigning-system-object-java-lang-object.aspx) para obtener un buen artículo sobre algo relacionado (por Jon Skeet). –
el enlace parece muerto. [Este] (http://codeblog.jonskeet.uk/2008/12/05/redesigning-system-object-java-lang-object/) puede ser el mismo artículo. – tkokasih