私は User example を使用した私の実装のために、equals と hashcode を実証するためにいくつかのコードを書いています:
public class User {
private String name;
private String pass;
//...
@Override
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != this.getClass()) {
return false;
}
User rhs = (User) obj;
EqualsBuilder eb = new EqualsBuilder();
eb.append(this.getName(), rhs.getName());
//eb.append(this.getPass(), rhs.getPass());
return eb.isEquals();
}
@Override
public int hashCode() {
HashCodeBuilder hcb = new HashCodeBuilder(17, 37);
hcb.append(this.getName());
hcb.append(this.getPass());
return hcb.toHashCode();
}
//...
public static void main(String[] args) {
User u1 = new User("foo","foo1");
User u2 = new User("bar","bar1");
System.out.println(u1.equals(u2));
System.out.println(u1.hashCode() + " ?= " + u2.hashCode());
User u3 = new User("foo","foo1");
User u4 = new User("foo","bar1");
System.out.println(u3.equals(u4));
System.out.println(u3.hashCode() + " ?= " + u4.hashCode());
}
}
出力:
false
2128613651 ?= 2129111967
true
2128615478 ?= 2214545177
オブジェクトが等しい可能性がありますが、ハッシュコードが異なるため(これは悪いことです)、間違っていると思いますが、名前も等しい場合にのみユーザーを等しくしたい.. name AND pass equals.
慣習を尊重し、達成したいことを達成するにはどうすればよいですか? あなたの助け/説明をありがとう:)