我需要为team类编写一个与提供的hashcode方法一致的equals()方法
HashCode方法
public int hashCode()
{
return this.getPro().hashCode()
+ this.getTeam().hashCode();
}
我的等于方法,但不会工作
public boolean equals(Object obj)
{
ClassName pro = (ClassName) obj;
return (this.getPro().hashCode() == pro.getPro());
(this.getTeam().hashCode() == pro.getTeam());
}
任何帮助都会很好
答案 0 :(得分:3)
在这里,您将哈希码(int)与对象进行比较。另外,你的陈述中间还有一个分号。
你应该试试这个:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
if (!pro.equals(myClass.pro)) return false;
if (!team.equals(myClass.team)) return false;
return true;
}
在这里比较对象的内容。
在@Bart K.评论之后,如果团队或专业人士可以为空,那么就可以编写equals()
方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
if (pro != null ? !pro.equals(myClass.pro) : myClass.pro != null) return false;
if (team != null ? !team.equals(myClass.team) : myClass.team != null) return false;
return true;
}
资源:
关于同一主题:
答案 1 :(得分:2)
&&
。因此,
public boolean equals(Object obj)
{
ClassName pro = (ClassName) obj;
return this.getPro() == pro.getPro() && this.getTeam() == pro.getTeam();
}
但是,您的hashCode()
无法生成良好的哈希值,equals()
在许多情况下会失败(例如与非ClassName
或null
进行比较)。有关如何正确实施它们,请参阅Overriding equals and hashCode in Java。假设没有派生类,请尝试
@Override public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof ClassName)) return false;
ClassName pro = (ClassName)obj;
<sometype> thisPro = getPro();
if (thisPro == null || !thisPro.equals(pro.getPro()) return false;
<sometype> thisTeam = getTeam();
if (thisTeam == null || !thisTeam.equals(pro.getTeam()) return false;
return true;
}