Давайте предположим, что у меня есть класс User
:Правильно ли для equals() зависит только от идентификатора?
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal account;
// other fields, getters and setters
}
Прилично переопределить метод equals
следующим?
@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;
}
Оказывается, что уникальность объекта определяется только его идентификатором. Но в моем приложении id
всегда уникален. Он предоставляется в базе данных. Является ли моя реализация equals
достаточно компетентной, чтобы учесть это? Или это не лучшая практика?
Конечно, я понимаю, что в этом случае hashCode
реализация должна быть следующей:
@Override
public int hashCode() {
return id.intValue();
}
Что вам нужно? .Equals() 'для чего-нибудь? – fge
Похоже, вы добры. Если объект равен, когда идентификаторы равны, у вас есть правильный код. – greedybuddha
Прежде чем 'User' будет сохранен,' id' может быть нулевым, а затем 'equals' будет бросать. Но это просто бородавка. Я часто видел ваш узор. Один из вопросов SO привел к этому документу Hibernate, который может не иметь для вас значения: http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html#persistent- classes-equalshashcode –