这是天真的等于,哈希码可以吗?
我有一个表示具有唯一Id属性的DB-Entries的类。 只有基于这个属性才能实现equals()
和hashcode()
方法
@Override public int hashCode()
{ return id;
}
@Override public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Task other = (Task) obj;
if (id != other.id)
return false;
return true;
}
一般来说,是的。 如果所有ID都是连续的小整数,则可以通过使用在整个可用32位中更广泛地分布位的函数从大集合中获得更好的性能。 但是,这应该找到其他方式。
我没有看到这个代码有什么问题。 但是,您可能想要思考一些问题:
id
吗? 使用id建立平等的问题是您可能想要将尚未分配id的对象与具有id的对象进行比较。 在那种情况下,equals和hashCode方法必须使用使对象唯一的业务字段(“业务键”)。
NPE表示,还要比较类而不是使用instanceof规则。
这个代码是可以忍受的,这不是我喜欢的做事方式。 对于简单的情况它是过度的,由Object定义的hashCode和equals方法将完成工作。 对于更高级的领域模型来说,这是不够的,因为业务关键字的子类化和比较实际上是有用的。
链接地址: http://www.djcxy.com/p/12399.html