我想覆盖自定义对象上的equals,并想检查当前对象是否等于Id(getId)在参数中传递的那个。我怎样才能做到这一点?谢谢
问问题
103 次
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()
,以便Set
s 和Map
s 像你想要的那样工作。
@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 回答