Después de agregar dos objetos idénticos a un conjunto, esperaría que el conjunto solo contuviera un elemento.Java: después de agregar 2 objetos idénticos a un conjunto, contiene los 2 elementos
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();
}
}
que considerar dos objetos idénticos como si tienen el mismo identificador (String).
Otra cosa extraña: Ni Foo.equals ni Foo.hashcode se acceden, por lo que puedo decir usando puntos de depuración/corte. ¿Qué me estoy perdiendo?
intente utilizar la anotación @Override –
Intente aplicar @Override en los métodos que cree que están anulados –