Me encontré con un problema interesante (y muy frustrante) con el equals()
método hoy que causó el bloqueo de lo que pensé que era una clase bien probada y causó un error que me llevó mucho tiempo rastrear.
Solo para completar, no estaba usando un IDE o depurador, solo un buen editor de texto antiguo y System.out. El tiempo era muy limitado y era un proyecto escolar.
De todos modos
Que estaba desarrollando un carrito de la compra básica que podría contener un ArrayList
de Book
los objetos . Con el fin de poner en práctica los addBook()
, removeBook()
y hasBook()
métodos de la Cesta, quería comprobar si el Book
ya existía en el Cart
. Entonces me voy
public boolean equals(Book b) {
... // More code here - null checks
if (b.getID() == this.getID()) return true;
else return false;
}
Todo funciona bien en las pruebas. Creo 6 objetos y los lleno con datos. Realiza muchas operaciones de adición, eliminación, has () en Cart
y todo funciona bien. Leí que puedes tener equals(TYPE var)
oequals(Object o) { (CAST) var }
asumir que, dado que funcionaba, no importaba demasiado.
Luego me encontré con un problema: necesitaba crear un Book
objeto con solo el contenido ID
dentro de la clase Libro. No se ingresarán otros datos. Básicamente lo siguiente:
public boolean hasBook(int i) {
Book b = new Book(i);
return hasBook(b);
}
public boolean hasBook(Book b) {
// .. more code here
return this.books.contains(b);
}
De repente, el equals(Book b)
método ya no funciona. Esto tomó MUCHO tiempo para rastrear sin un buen depurador y suponiendo que la Cart
clase se probó y corrigió correctamente. Después de cambiar el equals()
método a lo siguiente:
public boolean equals(Object o) {
Book b = (Book) o;
... // The rest goes here
}
Todo comenzó a funcionar nuevamente. ¿Hay alguna razón por la cual el método decidió no tomar el parámetro Libro a pesar de que claramente era un Book
objeto? La única diferencia parecía ser que se instanciaba dentro de la misma clase y solo se llenaba con un miembro de datos. Estoy muy muy confundido Por favor, arrojar algo de luz?