Quando implementiamo un Interface
abbiamo il contratto definito dall'interfaccia inject (or accept)
.
Equalable
& Hashable
sono due contratti diversi. Ma se osserviamo da vicino, vedremo che entrambi dipendono l'uno dall'altro, il che significa che fanno parte di uno single interface
, qualcosa come EqualableAndHashable
.
Ora la domanda ovvia è se debbano essere parte di questa nuova interfaccia EqualableAndHashable
o Object
?
Scopriamolo. Abbiamo == (equal operator)
per controllare l'uguaglianza di due oggetti. L'operatore ==
conferma se valori/riferimenti sono uguali per due diversi primitivi/oggetti. Tuttavia, non è sempre possibile rispondere semplicemente controllando con l'operatore ==
.
Ora la domanda è se questa uguaglianza, which is also a contract
, debba essere iniettata tramite interfacce o parte della classe Object?
Se diamo uno sguardo, non possiamo semplicemente dire qualcosa del tipo:
TypeX
non garantisce il contratto uguaglianza.
Diventerà un caos se alcuni tipi di oggetto offrono uguaglianza e altri no. Il che significa che l'oggetto di TypeX
deve rispettare il contratto di uguaglianza che è vero anche per tutti gli altri tipi di oggetto. Quindi, non deve iniettare l'uguaglianza da un'interfaccia, perché l'uguaglianza dovrebbe essere la parte del contratto per qualsiasi oggetto per impostazione predefinita, altrimenti creerà il caos.
Quindi abbiamo bisogno di Oggetti per realizzare l'implementazione di equals
. Ma non può implementare solo il metodo equals
, ma deve anche implementare il metodo hashcode
.
Date un'occhiata [qui] (http://msmvps.com/blogs/jon_skeet/archive/2008/12/05/redesigning-system-object-java-lang-object.aspx) per un buon articolo su qualcosa related (di Jon Skeet). Il collegamento –
sembra morto. [Questo] (http://codeblog.jonskeet.uk/2008/12/05/redesigning-system-object-java-lang-object/) potrebbe essere lo stesso articolo. – tkokasih