2012-10-16 17 views
5

दो प्रकार के बराबर तरीके हैं?क्या दो प्रकार के बराबर हैं() विधि

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 तरीकों के साथ तुलना जब हम बराबर विधि, हम क्यों परिभाषित करने की जरूरत ओवरराइड करना चाहते एक विधि जिसका पैरामीटर प्रकार वस्तु की है के बराबर होती है!

उत्तर

6

वहाँ वास्तव में इस के लिए एक अच्छा कारण है: java.lang.Object

  • आप में

    • आप सुपर क्लास ओवरराइड करने के लिए equals(Object) विधि की जरूरत के बराबर होती है विधि अक्सर भी एक ओवरलोड equals(Bigram) विधि उस मामले संभालती चाहते जहां संकलक साबित कर सकता है कि संकलन समय पर बिग्राम प्रकार है। यह प्रकार की जांच/कास्टिंग से बचकर प्रदर्शन में सुधार करता है और आपको अपने कोड में बेहतर प्रकार की जांच देता है।
    • अंततः आप उन वस्तुओं के साथ समानता के परीक्षण के लिए एक विशेष तरीके से बराबर लागू करना चाहते हैं जो स्वयं बिग्राम का उदाहरण नहीं हैं। इसका उपयोग देखभाल के साथ किया जाना चाहिए (क्या आप वास्तव में ऐसा कुछ चाहते हैं जो बिग्राम के बराबर नहीं माना जाता है?), लेकिन इसमें कुछ वैध अनुप्रयोग हैं (उदाहरण के लिए विभिन्न प्रकार की संग्रह वस्तुओं की सामग्री की तुलना करना)।

    आम तौर पर यह सबसे अच्छा है, लेकिन इतना है कि एक विधि, अन्य कॉल उन्हें लागू करने जैसे:

    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); 
    } 
    

    इस तरह अधिक संक्षिप्त है और इसका मतलब है कि आप केवल एक बार समानता परीक्षण तर्क लागू करने की आवश्यकता (अपने आप को दोहराना मत करो!)।

  • 2

    चौखटे/एपीआई कि equals() विधि (जैसे containsKey() नक्शे में, सूचियाँ आदि में,) फोन वस्तु वर्ग से अधिरोहित equals() और नहीं अतिभारित संस्करण कहते हैं। इसलिए को परिभाषित करने के लिए को की आवश्यकता है।

    2

    क्योंकि अधिभावी आप विधि तर्क को कम नहीं कर सकते हैं के मामले में, हाँ वापसी प्रकार उप प्रकार नीचे दिए गए लिंक की जाँच करें हो सकता है

    http://docs.oracle.com/javase/tutorial/java/IandI/override.html

    संबंधित मुद्दे