我有一个类,它的对象将存储在 hashmap、hashset 中。
我需要支持字段的通配符相等性,因此我添加了该签入equals方法。现在,如何基于此参数构建我的哈希码方法?即,如果我按照下面的代码进行计算,我将获得 2 个通过我的 equals 方法的相等性检查的对象的不同哈希码。
例如,考虑以下课程:
public class Person {
private String fname = "";
private String lname = "";
private String profession = "";
// getters & setters
@Override
public boolean equals(Object obj) {
if (fname == null) {
if (other.fname != null)
return false;
} else if (!fname.equals(other.fname) && !other.fname.equals("*") && !fname.equals("*"))
return false;
return true;
// similar for other fields
}
@Override
public int hashCode() {
return Objects.hashCode(this.fname, this.lname , this.profession);
}
}
编辑:
正如一些评论中指出的那样,应该有一个单独的方法来检查通配符是否相等。这种方法的限制是我将无法获得正确的结果,就像set.contains他们在object.equals内部检查一样。因此set.contains,即使我的对象通过了单独的通配符相等方法的相等测试,我也会返回 false。
浮云间
相关分类