2010-06-10 7 views

उत्तर

16

दुर्भाग्य से मैं नहीं मानता कि वहाँ एक है - जो कस्टम समानता तुलना :(

जाहिर है Comparable<T>IComparable<T> और Comparator<T>IComparer<T> के लिए करने के लिए एक समकक्ष के रूप में है, लेकिन मैं के साथ हैश नक्शे आदि उपलब्ध कराने के मामले में एक दर्द है वहाँ IEqualityComparer<T> और IEquatable<T> के किसी भी बराबर है विश्वास नहीं है।

तृतीय पक्ष इंटरफेस और नक्शे जो उन्हें निश्चित रूप से उपयोग करने का एक ही प्रकार उपलब्ध कराने के पुस्तकालयों हो सकता है ...

+0

यह एक प्रतिनिधि सजावट बनाने के लिए इतना अधिक नहीं होगा जो 'मानचित्र' और आपके स्वयं के 'इक्टेबल' (* यह भी एक शब्द है? *) इंटरफ़ेस लागू करता है। – Esko

+0

@Esko: क्या आपका मतलब अंतर्निहित मानचित्र को प्रॉक्सी कुंजी शामिल है, प्रभावी ढंग से? यह करने योग्य है, लेकिन यह बदसूरत होगा ... और मुझे संदेह है कि जब आप कमजोर मैप्स आदि करने की कोशिश करते हैं तो यह समस्याएं पैदा करेगा। अगर यह वहां से शुरू होता तो यह बहुत अच्छा होता। –

+0

ऐसा क्यों नहीं है। 'वीक रिफरेंस' के माध्यम से प्रॉक्सी करना एक अतिरिक्त काम नहीं होना चाहिए, या तो। हालांकि, मुझे आपकी बात दिखाई देती है, सी # में इन चीजों में से बहुत सी चीजें लागू होती हैं जबकि जावा को "बेयरबोन" भाषा पसंद है। मुझे लगता है कि Google संग्रह में इसके पूर्वानुमान/फ़ंक्शन सिस्टम के माध्यम से कुछ हो सकता है लेकिन मुझे यकीन नहीं है ... – Esko

6

यदि आप equals() विधि को लागू करने के लिए बस उस इंटरफ़ेस की तलाश में हैं, तो आप सीधे object.equals() विधि को ओवरराइड कर सकते हैं।

+1

'बराबर()' का एक अच्छा ओवरराइड कार्यान्वयन यहां पाया जा सकता है: http://stackoverflow.com/questions/185937/overriding-the-java-equals-method-quirk – Julien

1

IEquatable<T> इंटरफ़ेस मुख्य रूप से जेनेरिक कक्षाओं के साथ उपयोगी है जो अनबॉक्स किए गए संरचना प्रकारों के कई उदाहरणों को संग्रहीत करते हैं; यह मोहरबंद प्रकारों के साथ मामूली रूप से उपयोगी है, और असीमित प्रकारों के साथ बेकार से भी बदतर है। जावा में IEquatable<T> को लागू करने के लिए वास्तव में कोई बात नहीं होगी।

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