セットに2つの同一オブジェクトを追加した後、セットには1つのエレメントしか含まれません。Java:2つの同じオブジェクトをセットに追加した後、2つのエレメントが含まれています
public void addIdenticalObjectsToSet(){
Set<Foo> set = new HashSet<Foo>();
set.add(new Foo("totoro"));
set.add(new Foo("totoro"));
Assert.assertEquals(1, set.size()); // PROBLEM: SIZE=2
}
private class Foo {
private String id;
public Foo(String id) {
this.id = id;
}
public String getId() {
return id;
}
public boolean equals(Object obj) {
return obj!= null && obj instanceof Foo &&
((Foo)obj).getId().equals(this.getId());
}
public int hashcode() {
return this.getId().hashCode();
}
}
同じid(String)を持つ場合、2つのオブジェクトが同一であると見なします。
他の変わったこと:Foo.equalsもFoo.hashcodeも、デバッグ/ブレークポイントを使って知る限り、アクセスされません。私は何が欠けていますか?
@Overrideアノテーションを使用してください –
オーバーライドされていると思われるメソッドに@Overrideを適用してみてください。 –