Załóżmy mam klasę User
:Czy właściwe jest, aby equals() zależało tylko od identyfikatora?
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal account;
// other fields, getters and setters
}
Czy to wypada zastąpić metodę equals
następująco?
@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;
}
Okazuje się, że wyjątkowość obiektu jest określona tylko jego identyfikatorem. Ale w mojej aplikacji, id
jest zawsze wyjątkowy. Jest dostarczany w bazie danych. Czy moja implementacja equals
jest na tyle kompetentna, aby to uwzględnić? Czy nie jest to najlepsza praktyka?
Oczywiście rozumiem, że w tym przypadku realizacja hashCode
powinny być następujące:
@Override
public int hashCode() {
return id.intValue();
}
Czego potrzebujesz '.equals()' dla, jeśli w ogóle coś? – fge
Wygląda na to, że jesteś dobry. Jeśli obiekt jest równy, gdy id są równe, masz poprawny kod. – greedybuddha
Zanim "Użytkownik" zostanie utrwalony, "id" może mieć wartość null, a następnie "równy" wyrzuci. Ale to tylko brodawka. Widziałem często twój wzorzec. Jedno pytanie SO doprowadziło do tego fragmentu dokumentacji Hibernate, która może nie mieć znaczenia dla Ciebie: http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html#persistent- classes-equalshashcode –