2010-04-13 42 views
1

我們使用HyperJAXB生成了一些(很多)類。所有的類都實現Equals和HashCode,並具有下面的實現風格。出現此代碼永遠不會執行..是否有任何特殊的原因,我們需要此代碼?如果可以的話,我期望簡化課程。我們是否需要HyperJAXB生成的hashCode&equals方法?

public boolean equals(Object object) { 
     if (!(object instanceof MyClass)) { 
      return false; 
     } 
     if (this == object) { 
      return true; 
     } 
     final EqualsBuilder equalsBuilder = new JAXBEqualsBuilder(); 
     equals(object, equalsBuilder); 
     return equalsBuilder.isEquals(); 
    } 

    public void hashCode(HashCodeBuilder hashCodeBuilder) { 
     hashCodeBuilder.append(this.getValue()); 
     hashCodeBuilder.append(this.getId()); 
    } 

    public int hashCode() { 
     final HashCodeBuilder hashCodeBuilder = new JAXBHashCodeBuilder(); 
     hashCode(hashCodeBuilder); 
     return hashCodeBuilder.toHashCode(); 
    } 

回答

5

如果你的應用程序或基礎設施JAXB曾經把這些對象到集合或地圖的情況,然後有一個很好的機會,equalshashCode方法使用。

編輯

我發現在hyperjaxb3 documentation如下:

生成equals和hashCode方法

雖然這不是直接由JPA規範要求,它仍然是建議在實體類中正確實現equals和hashCode方法。使用Hyperjaxb3,您可以進行配置,使用equals和hash代碼構建器或關閉equals和hashCode代。

因此應該可以關閉這些方法的生成,但hyperjaxb3設計者似乎在說最好不要這樣做。

+0

相信它確實把它們放入一個'List' ..但你可以在所有的'List'中存儲重複的東西嗎?不是嗎?它爲什麼稱爲平等?而'List'-s不會散列任何東西嗎? – 2010-04-13 11:30:11

+2

如果某事調用'List.contains(...)',則調用equals方法。 – 2010-04-13 11:42:13

+0

@CodeMed - 我沒有看到任何相似之處......我無法幫助你。 – 2014-09-05 11:32:29

4

你可以,如果你想禁用的equals/hashCode方法產生在你的maven-hyperjaxb3-插件配置使用

<generateEquals>false</generateEquals> 
<generateHashCode>false</generateHashCode> 

。但我不會推薦。

此致敬禮,「hyperjaxb3設計師」。 :)

相關問題