我試圖在我的應用程序中爲Java類Book
和Chapter
實現equals
方法。 Book
有一套Chapter
s,而Chapter
有一個關聯的Book
。雙向關聯如下圖所示:equals()方法用於具有雙向關聯的類
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;
}
}
}
現在我試圖執行equals
爲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;
}
}
}
在這裏,我想知道如果我需要比較的書場爲好。這不會啓動一個無限循環嗎?對這種雙向關聯實施equals
方法的正確方法是什麼?
即使使用接口可以防止類之間的雙向依賴,仍然是在運行時的實例之間的雙向依賴。所以我建議不要把這些書(通過'=='或'equals()')進行比較,但是要麼簡單地忽略這些書(是不同的書中兩個完全相同或不同的書的相同章節),要麼比較一本書標識符如ISBN。 – 2011-05-28 18:09:53
我完全同意,我只是評論了循環依賴,因爲我被教導要儘可能避免它們。 – 2011-05-30 14:48:33