जब हम इंटरफेस द्वारा परिभाषित अनुबंध Interface
हम inject (or accept)
लागू करते हैं।
Equalable
& Hashable
दो अलग-अलग अनुबंध हैं। लेकिन अगर हम बारीकी से नजर रखते हैं तो हम देखेंगे कि वे दोनों एक दूसरे पर निर्भर हैं, जिसका अर्थ है कि वे single interface
का हिस्सा हैं, EqualableAndHashable
जैसे कुछ।
अब स्पष्ट सवाल यह है कि क्या उन्हें इस नए EqualableAndHashable
इंटरफ़ेस या Object
का हिस्सा होना चाहिए?
चलो पता लगाएं। दो वस्तुओं की समानता की जांच के लिए हमारे पास == (equal operator)
है। ==
ऑपरेटर पुष्टि करता है कि मूल्य/संदर्भ दो अलग-अलग प्राइमेटिव/ऑब्जेक्ट्स के बराबर हैं या नहीं। लेकिन ==
ऑपरेटर के साथ जांच करके जवाब देना हमेशा संभव नहीं होता है।
अब सवाल यह है कि क्या यह समानता, which is also a contract
, ऑब्जेक्ट क्लास के इंटरफेस या भाग के माध्यम से इंजेक्शन दी जानी चाहिए?
यदि हम एक बार देख ले, हम बस यह नहीं कह सकते कुछ की तरह:
TypeX
समानता अनुबंध गारंटी नहीं है।
कुछ ऑब्जेक्ट प्रकार समानता प्रदान करते हैं और कुछ नहीं करते हैं तो यह अराजकता बन जाएगा। जिसका अर्थ है TypeX
की वस्तु को समानता अनुबंध का सम्मान करना चाहिए जो अन्य सभी ऑब्जेक्ट प्रकारों के लिए भी सही है। इसलिए, इसे किसी इंटरफ़ेस से समानता को इंजेक्ट नहीं करना चाहिए, क्योंकि समानता किसी भी ऑब्जेक्ट के लिए डिफ़ॉल्ट रूप से अनुबंध का हिस्सा होना चाहिए, अन्यथा यह अराजकता पैदा करेगा।
तो हमें equals
के कार्यान्वयन के साथ आने के लिए ऑब्जेक्ट की आवश्यकता है। लेकिन यह केवल equals
विधि को लागू नहीं कर सकता है, इसे hashcode
विधि को भी लागू करने की आवश्यकता है।
किसी चीज़ पर एक अच्छे लेख के लिए [यहां] (http://msmvps.com/blogs/jon_skeet/archive/2008/12/05/redesigning-system-object-java-lang-object.aspx) देखें संबंधित (जॉन स्कीट द्वारा)। –
लिंक मृत लगता है। [यह] (http://codeblog.jonskeet.uk/2008/12/05/redesigning-system-object-java-lang-object/) एक ही लेख हो सकता है। – tkokasih