Sau khi thêm hai đối tượng giống hệt vào một Tập, tôi mong đợi tập hợp chỉ chứa một phần tử.Java: Sau khi thêm 2 đối tượng giống hệt vào Tập, nó chứa 2 phần tử
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();
}
}
Tôi xem hai đối tượng giống hệt nhau nếu chúng có cùng id (Chuỗi).
Điều lạ lùng khác: Không truy cập Foo.equals hoặc Foo.hashcode, theo như tôi có thể nói bằng cách sử dụng gỡ lỗi/điểm ngắt. Tôi đang thiếu gì?
cố gắng sử dụng @Override anotation –
Thử áp dụng @Override trên các phương pháp mà bạn cho rằng bị ghi đè –