我想在自定义对象上重写equals,并想检查当前对象是否等于Id(getId)在参数中传递的对象。我该怎么做?感谢
仅凭您提供的信息很难给出答案。但你想要的大致是这样的东西:
@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
。
您需要检查传入对象的类型和"null度"。您还应该检查this.id
是否为null,以便进行彻底检查。您可能还希望覆盖Object.hashCode()
,以便Set
和Map
能够像您希望的那样工作。
@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();
}