Supponiamo Ho classe User
:È corretto per equals() dipendere solo da un ID?
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal account;
// other fields, getters and setters
}
E 'proprio l'override del metodo equals
come segue?
@Override
public boolean equals(Object ob) {
if (ob == null) {
return false;
}
if (this == ob) {
return true;
}
if (ob instanceof User) {
User other = (User) ob;
return this.id.equals(other.getId());
}
return false;
}
Si scopre che l'unicità di un oggetto è determinata solo dal suo ID. Ma nella mia applicazione, id
è sempre univoco. È fornito nel database. La mia implementazione equals
è sufficientemente competente per tener conto di ciò? O non è questa la migliore pratica?
Naturalmente capisco che in questo caso l'attuazione hashCode
dovrebbe essere la seguente:
@Override
public int hashCode() {
return id.intValue();
}
A cosa serve '.equals()', se mai? – fge
Sembra che tu stia bene. Se l'oggetto è uguale quando gli ID sono uguali, hai il codice corretto. – greedybuddha
Prima che un 'utente' venga mantenuto,' id' può essere nullo, e quindi 'equals' getterà. Ma questa è solo una verruca. Ho visto il tuo modello spesso. Una domanda su SO ha portato a questo frammento di documentazione di Hibernate, che potrebbe non avere importanza per te: http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html#persistent- classes-equalshashcode –