2013-03-04 7 views
5

मार्कर इंटरफेस केवल कक्षा को चिह्नित करने के लिए अधिक उपयोगी होते हैं, वही बात एनोटेशन के माध्यम से प्राप्त की जा सकती है। उदाहरण के लिए Cloneable इंटरफ़ेस @Cloneable हो सकता है।टिप्पणियां पूरी तरह से मार्कर इंटरफेस को प्रतिस्थापित कर सकती हैं?

तो क्या मार्कर इंटरफेस के लिए अभी भी आवश्यकता है या एनोटेशन द्वारा स्थानांतरित किया जा सकता है? क्या उनमें से किसी का उपयोग करने का कोई फायदा/नुकसान है? मेरा मतलब है कि एक दूसरे को पसंद करते हैं?

+1

जेनरिक्स से पहले भी मार्कर इंटरफ़ेस को एंटीपेटर्न के रूप में स्थापित किया गया था। मेटाडाटा के लिए –

+0

@ मार्कोटोपॉलिक पहले मार्कर इंटरफेस की आवश्यकता थी, लेकिन अब एनोटेशन का उपयोग करके हासिल किया जा सकता है। यही कारण है कि इसे एक विरोधी पैटर्न कहा जाता है, क्या मैं सही हूँ? –

+0

हां, प्लस जावा 1.4 पर भी मार्कर इंटरफेस के बिना डिजाइन करने की सिफारिशें थीं। मार्कर इंटरफेस पॉलिमॉर्फिज्म की अवधारणा का दुरुपयोग है। –

उत्तर

3

मार्कर इंटरफेस एनोटेशन से बेहतर होते हैं जब उनका उपयोग किसी प्रकार को परिभाषित करने के लिए किया जाता है। उदाहरण के लिए, Serializable का उपयोग किया जा सकता है (और इस्तेमाल किया जाना चाहिए) एक तर्क के प्रकार के रूप में जो serializable होना चाहिए। एक एनोटेशन कर रही अनुमति नहीं देता: मार्कर इंटरफ़ेस एक प्रकार को परिभाषित नहीं करता

public void writeToFile(Serializable object); 

हैं, लेकिन केवल मेटा डेटा, तो एक एनोटेशन बेहतर है।

1

उल्लेख करने के लिए एक और बात एनोटेशन का उपयोग करने की लागत होगी। यह जांचने के लिए कि क्या ऑब्जेक्ट एक इंटरफ़ेस का उदाहरण है,का उपयोग कर सकता है जो आजकल अपेक्षाकृत कम लागत वाला ऑपरेशन है। एनोटेशन का उपयोग करने के लिए Java reflection कॉल की आवश्यकता होती है और यह अधिक महंगा है।

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