यदि Map
की कुंजी के हिस्से के रूप में Class<T>
का उपयोग करने की आवश्यकता है तो hashCode
और equals
को परिभाषित करने का सही तरीका क्या है?
एक Class<T>
Object
से लोगों को जो संदर्भ समानता के लिए जाँच करें और hashCode के रूप में स्मृति पता वापस लेकिन मेरे मन में यह स्पष्ट क्या equals
की सार्थक परिभाषा और एक Class<T>
की hashCode
परिभाषा नहीं है इनहेरिट करती है।
क्या मुझे वास्तविक उदाहरण के तरीकों का उपयोग करने के लिए उदाहरण के लिए theClass.getClass().hashCode();
का उपयोग करना चाहिए (जहां हमारे पास Class<T> theClass;
है)?
लेकिन ऐसा करने के लिए यह सही काम प्रतीत नहीं होता है।
में उदाहरण के लिए javadocClass<T>
के लिए:हैशकोड को अर्थपूर्ण रूप से परिभाषित करने के लिए और java.lang.Class <T> के लिए बराबर कैसे करें?
हर सरणी भी एक वर्ग है कि एक वर्ग उद्देश्य यह है कि एक ही तत्व प्रकार के साथ सभी सरणियों और आयामों की संख्या से साझा किया जाता है के रूप में देखा जा सकता है के अंतर्गत आता है
तो यह कुछ मामलों में एक ही Class<T>
वस्तुओं के बीच साझा किया जाता है में है? तो पालन करने का तरीका क्या होगा? संदर्भ समानता का उपयोग करने के लिए शायद theClass.hashCode()
और theClass.equals()
का उपयोग करें? यहां बिल्कुल यकीन नहीं है।
परिभाषित करने के लिए कुछ भी नहीं है, क्योंकि हैशकोड और बराबर पहले ही कार्यान्वित किए गए हैं, और मुझे यह समझने में कठिनाई होती है कि आप यह कार्यान्वयन क्यों बदलेंगे और यह भी कठिन समय लग रहा है। –
@JensSchauder: स्वचालित रूप से 'हैशकोड' और 'बराबर' उत्पन्न करने के लिए ग्रहण का उपयोग करके यह चेतावनी दी गई है कि 'हैशकोड' और 'बराबर' को 'कक्षा' के लिए परिभाषित नहीं किया गया है। इससे मुझे चिंता है कि यह एक वैध चेतावनी है और मैं इसके बारे में कुछ करना चाहिए। – Cratylus
मुझे नहीं पता कि आप क्या करने की कोशिश कर रहे हैं, लेकिन 'कक्षा' एक वर्ग है जो जावा का हिस्सा है। आप इसके लिए कुछ भी लागू नहीं कर सकते हैं। स्रोत फ़ाइल का पूरा नाम क्या है जहां आप हैशकोड जोड़ने और बराबर करने का प्रयास करते हैं? –