Estoy tratando de implementar el método equals
para las clases Java Book
y Chapter
en mi aplicación. Book
tiene un conjunto de Chapter
s, mientras que Chapter
tiene asociado Book
. La asociación bidireccional se muestra a continuación:método equals() para las clases con asociación bidireccional
class Book{
private String isbn;
private String name;
private Date publishDate;
private Set<Chapter> chapters;
...
public boolean equals(Object o){
if(o == this){
return true;
}
if (!(o instanceof Book)){
return false;
}
Book book = (Book)o;
if((this.isbn.equals(book.getIsbn())) && (this.name.equals(book.getName())) &&(this.publishDate.equals(book.getPublishDate())) &&(this.chapters.equals(book.getChapters()))){
return true;
}else{
return false;
}
}
}
Ahora me trató de implementar equals
para Chapter
:
public class Chapter {
private String title;
private Integer noOfPages;
private Book book;
...
public boolean equals(Object o){
if(o == this){
return true;
}
if (!(o instanceof Chapter)){
return false;
}
Chapter ch = (Chapter)o;
if((this.title.equals(book.getTitle())) && (this.noOfPages.intValue()== book.getNoOfPages().intValue()) ){
return true;
}else{
return false;
}
}
}
Aquí, me pregunto si tengo que comparar el campo libro también. ¿No comenzaría eso un ciclo infinito? ¿Cuál es la forma correcta de implementar el método equals
para tales asociaciones bidireccionales?
Aunque el uso de interfaces evita la dependencia bidireccional entre las clases, aún existe una dependencia bidireccional entre las instancias en tiempo de ejecución. Así que sugiero que no se deben comparar los libros (ya sea por '==' o 'igual()'), pero simplemente se ignoran los libros (¿son dos capítulos idénticos de diferentes libros realmente iguales o diferentes?), O se compara un libro identificador como el ISBN. –
Estoy completamente de acuerdo, acabo de comentar sobre la dependencia circular ya que me enseñaron a evitarlos siempre que sea posible. –