我想在自定义对象上覆盖equals,并想要检查当前对象是否等于Id(getId)在参数中传递的对象。我怎样才能做到这一点?感谢
答案 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()
,以便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();
}