2012-10-16 19 views
5

İki tür eşit yöntem var mı? biz tanımlamanız gerekir neden eşit yöntemi, geçersiz kılmak istediğinizdeİki tür eşittir() yöntemi

public boolean equals(Bigram b) { 
    return b.first == first && b.second == second; 
    } 

@Override public boolean equals(Object o) { 
    if (!(o instanceof Bigram)) 
     return false; 
    Bigram b = (Bigram) o; 
    return b.first == first && b.second == second; 
} 

, 2 yöntemlerle karşılaştırmak bir yöntem olan parametre nesne türü taşımaktadır eşittir!

cevap

6

aslında bunun için iyi bir nedeni vardır: java.lang.Object

  • You içinde eşit
    • Sen üst sınıf geçersiz kılmak için equals(Object) yöntem gerekir yöntem genellikle da durumda işler bir aşırı equals(Bigram) yöntemi istiyorum Derleyici, türün derleme zamanında Bigram olduğunu kanıtlayabilir. Bu, tür denetimi/dökümden kaçınarak performansı artırır ve kodunuzda daha iyi bir tür denetimi sağlar.
    • Son olarak, eşitliklerini, kendileri için bir Bigram örneği olmayan nesnelerle eşit şekilde test etmek için özel bir şekilde uygulamak isteyebilirsiniz. Bu, dikkatle kullanılmalıdır (Bigram örneğinin Bigram örneğine eşit olduğu düşünülen bir şey gerçekten istiyor musunuz?), Ancak bazı geçerli uygulamalara (örneğin, farklı koleksiyon nesneleri türlerinin karşılaştırılması) sahip olmalıdır.

    Normalde bir yöntem diğer çağırır böylece onları uygulamak en iyisidir ancak örneğin:

    public boolean equals(Bigram b) { 
        return b.first == first && b.second == second; 
    } 
    
    @Override public boolean equals(Object o) { 
        if (!(o instanceof Bigram)) return false; 
        return equals((Bigram)o); 
    } 
    

    Bu şekilde daha kısa olduğunu ve sadece bir kez eşitlik test mantığı uygulamak gerektiği anlamına gelmektedir (Kendinizi Tekrar Etmeyin!).

  • 2

    çerçeveler/equals() yöntemi (gibi vb Listelerinde containsKey() haritalarda, ,) geçersiz nesne sınıfından equals() değil aşırı versiyonu diyoruz API'leri. Bu nedenle, public boolean equals(Object obj) tanımlamak için , gerekir.

    İlgili konular