我需要在某些类A中实现equals方法。类A具有一个Enum类型的有序集合,而我想实现的行为是,对于集合中具有完全相同的Enum值的两个类A实例,equals返回true (位于集合的完全相同的位置)。
由于我是Java新手,因此遇到了问题,并且我不知道如何正确实现equals或hashcode方法,因此任何帮助都将是一件好事:)
最佳答案
如果您使用的是eclipse(与大多数Java IDE一样,netbeans具有类似的功能),则只需进入“源”菜单,然后选择“生成hashcode()和equals()”。然后,选择要考虑的字段(在您的情况下为枚举值列表)。
话虽如此,假设您已经有了枚举,这是eclipse为我生成的代码。并不是说哈希码通常涉及素数,以及乘法和加法。这往往会给您一些合理的价值分配。
public class Foo {
private List<FooEnum> enumValues;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((enumValues == null) ? 0 : enumValues.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Foo other = (Foo) obj;
if (enumValues == null) {
if (other.enumValues != null)
return false;
}
else if (!enumValues.equals(other.enumValues))
return false;
return true;
}
}