-2

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

4

2 回答 2

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

于 2012-09-30T22:31:10.930 回答
0

您需要检查传入对象的类型和“nullness”。您还应该检查是否this.id为 null 只是为了彻底。你也可能想要覆盖Object.hashCode(),以便Sets 和Maps 像你想要的那样工作。

@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();
}
于 2012-09-30T22:39:22.043 回答