【发布时间】:2013-06-04 21:38:06
【问题描述】:
假设我有课 User:
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 决定。但在我的应用程序中,id 始终是唯一的。它在数据库中提供。我的equals 实现是否足以解决这个问题?或者这不是最佳做法?
当然我知道在这种情况下hashCode 的实现应该如下:
@Override
public int hashCode() {
return id.intValue();
}
【问题讨论】:
-
如果有的话,您需要
.equals()做什么? -
看起来你很好。如果对象在 id 相等时也相等,则说明代码正确。
-
在
User被持久化之前,id可以为空,然后equals将抛出。但这只是一个疣。我经常看到你的模式。一个 SO 问题导致了这一点 Hibernate 文档,这对您可能无关紧要:docs.jboss.org/hibernate/core/4.0/manual/en-US/html/… -
id -> (name , age ,account) .. 你依赖于数据库约束.. 你应该将 id 字段设为最终(如果你没有使用休眠)
-
因为
id是Long你的hashCode方法可以是return id.hashCode()
标签: java oop overriding equals hashcode