覆盖客户对象上的.equals()

时间:2012-09-30 22:26:00

标签: java override equals

我想在自定义对象上覆盖equals,并想要检查当前对象是否等于Id(getId)在参数中传递的对象。我怎样才能做到这一点?感谢

2 个答案:

答案 0 :(得分:1)

仅提供您提供的信息很难给出答案。但你想要的东西大致是这样的:

@Override
public boolean equals(Object o) {
    if (! (o instanceof MyClass)) return false;
    return id == ((MyClass)o).getId();
}

id是您的数据字段(可能是int),MyClass是您班级的名称。

作为备注:如果您覆盖equals,强烈建议您覆盖hashCode。如果id确实是整数,那么您可以考虑让hashCode返回id

答案 1 :(得分:0)

您需要检查传入对象的类型和“nullness”。您还应该检查this.id是否为空是彻底的。您也可能希望覆盖Object.hashCode(),以便SetMap能够正常工作。

@Override
public boolean equals(Object obj) {
  if ((obj == null) || (!getClass().isAssignableFrom(obj.getClass()))) {
    return false;
  } 

  if (this.id == null) {
    return false;
  } else {
    return this.id.equals((ClassName)obj.getId());
  }
}

@Override
public int hashCode() {
  return this.id.hashCode();
}