Ho un modello di dominio in cui utilizzo alcune relazioni di aggregazione, cioè un oggetto di classe A
contiene zero o più oggetti di classe B
.
Uso Java per l'implementazione e rappresento una tale aggregazione come un campo di tipo List<B>
in A
, e un campo di tipo A
in B
. In questo modo, ogni oggetto può essere la radice di un albero di aggregazione. Classi A
e B
possono anche contenere altri campi shallow , cioè campi di tipo int
, float
, String
e così via.
Ora ho bisogno di definire diversi tipi di metodi di uguaglianza sul mio modello:
-
Uguaglianza ridotta : confronta due istanze di
A
confrontando solo i suoi campi poco profondi, ad esempio tralasciando i riferimenti ad altri oggetti di dominio. In questo caso, mi interessa solo sapere se due nodi hanno lo stesso contenuto. -
Uguaglianza profonda : confronta due istanze di
A
confrontando i suoi campi poco profondi e confrontando ricorsivamente i suoi figli. In questo caso, voglio controllare se due alberi completi sono uguali.
Ho preso in considerazione l'override dei metodi hashCode()
e equals()
per la classe A
, ma non so se questo dovrebbe essere l'uguaglianza superficiale o il metodo dell'uguaglianza profonda. Una volta deciso quale dei due metodi di uguaglianza è implementato come A.equals()
, definirò l'altro metodo con un altro nome. Questa è una scelta importante perché il metodo equals()
determina cose come l'appartenenza a Set
.
Quindi, una delle due possibilità (shallow vs deep ugality) è considerata una scelta più idiomatica per l'implementazione del metodo equals
in Java?