2012-11-08 12 views
6

क्या कोई जावा में मार्कर इंटरफेस के अनुबंध की व्याख्या कर सकता है?मार्कर इंटरफेस

पूर्व के लिए: यदि Clonable कोई फ़ील्ड/विधियों वाला मार्कर इंटरफेस है, तो clone() कहां परिभाषित किया गया है?

हम Clonable मैं/च जब भी clone() प्रयोग किया जाता है क्यों लागू करना चाहिए?

खैर मेरे सवाल का, था अगर clone()java.lang.Object वर्ग, क्यों लागू Clonable मैं/च clone() ओवरराइड करने के लिए की एक विधि है।

किसी जावा के इस सम्मेलन पर विस्तृत सकता है?

धन्यवाद अग्रिम में

+1

स्टैक ओवरव्लो पर 'क्लोनेबल' के बारे में बहुत सारे प्रश्न और उत्तर हैं। आप उन लोगों की समीक्षा करना चाहेंगे। – NPE

+0

http://stackoverflow.com/questions/4081858/about-java-cloneable – Shashi

उत्तर

7

clone()java.lang.Object कक्षा में परिभाषित किया गया है जो सभी वर्गों से विस्तारित है, हालांकि यह protected है। यह वास्तव में एक ठोस विधि कार्यान्वयन है जो ऑब्जेक्ट के फील्ड क्लोन द्वारा फ़ील्ड करता है, लेकिन केवल तभी होता है जब आपने Cloneable इंटरफ़ेस को कार्यान्वित किया है, यह इंगित करने के लिए।

अभ्यास में कई लोग clone() विधि को ओवरराइड करते हैं ताकि वे इसे public बना सकें और कक्षा के बाहर से क्लोनिंग की अनुमति दे सकें।

यह संपूर्ण पैटर्न काफी असामान्य है और ऐसा कुछ नहीं जिसे आप आमतौर पर दोहराना चाहते हैं, मैं JVM में कई अन्य उदाहरणों के बारे में नहीं सोच सकता जहां एक जोड़ा मार्कर इंटरफ़ेस और विधि है। से जावा 5 आगे मार्करों के लिए एनोटेशन का उपयोग करना बेहतर है। जैसे @XmlRootElement बनाम Serializable इंटरफेस (पूर्व जावा 5) Jax-बी के रूप में एक प्रकार serializable (पोस्ट जावा 5) चिह्नित करने के लिए प्रयोग किया जाता है इंगित करने के लिए एक वर्ग द्विआधारी serializable है इस्तेमाल किया।

+0

@ मोहम्मदफैसल: http://meta.stackoverflow.com/questions/254990/when-should-code-formatting-be-used-for-non-code-text – Tom

-1

मार्कर इंटरफेस शरीर के किसी भी रूप में such.They सिर्फ उन्हें विस्तार वर्गों की वस्तुओं के लिए एक पूर्वनिर्धारित खास तरह से व्यवहार करने के लिए जावा दुभाषिया पूछने की जरूरत नहीं है।

+2

एर, नहीं। हां, उनके पास विधियों और फ़ील्ड नहीं हैं लेकिन जावा दुभाषिया परवाह नहीं है। –

1

Clonable में clone() विधि नहीं है, जो java.lang.Object में संरक्षित है।

अधिक जानकारी जोश बलोच के प्रभावी जावा से उपलब्ध here

प्रशस्ति पत्र:।

"Cloneable इंटरफ़ेस वस्तुओं के लिए एक mixin इंटरफ़ेस विज्ञापित करने के लिए है कि वे क्लोनिंग की अनुमति के रूप में इरादा था दुर्भाग्य से यह इस उद्देश्य को पूरा करने में विफल रहता ... यह इंटरफेस का एक अत्यधिक अटूट उपयोग है और एक को अनुकरण नहीं किया जा सकता है ... इंटरफ़ेस को कक्षा पर कोई प्रभाव डालने के लिए, यह और उसके सभी सुपरक्लास को काफी जटिल, लागू करने योग्य और बड़े पैमाने पर अनियंत्रित होना चाहिए प्रोटोकॉल "

0

एक मार्कर इंटरफ़ेस टैग कक्षाओं के लिए एक आम तकनीक है। वे कक्षाओं (सामान्य रूप से) में व्यवहार नहीं जोड़ते हैं। Clonable इंटरफ़ेस ऐसा टैग है: प्रत्येक श्रेणी Clonable के साथ स्वयं क्लोन करने में सक्षम है (यह नियम है)।

Serializable के साथ भी यही, हालांकि वहाँ कि मार्कर इंटरफ़ेस के पीछे कुछ और छिपा जादू है (वस्तु serializer कुछ तरीकों और क्षेत्रों के लिए लग रहा है, कि में चिह्नित वर्ग को लागू या नहीं हो सकता है)

बोनस की जानकारी: Clonable भूल गए, इसकी टूटी हुई। यदि आप वास्तविक जीवन में क्लोन बनाना चाहते हैं, तो कॉपी कन्स्ट्रक्टर पैटर्न की तलाश करें।

1

java.lang.object वर्ग सभी जावा वर्गों के एक सुपर/माता-पिता वर्ग है, आप जावा में एक वस्तु बनाना चाहते हैं, तो यह लागू java.lang.object वर्ग होना चाहिए। यदि आप अपने कोड में ऑब्जेक्ट सुपर क्लास आयात नहीं कर रहे हैं तो संकलक आपके कोड में अंतर्निहित रूप से आयात करेगा .. SO स्वचालित रूप से आपके सभी गुण और व्यवहार आपके लिए उपलब्ध है (क्लाउड), जिसमें क्लोन() विधि शामिल है, अगर आप कॉल करते हैं क्लोन() विधि आपके प्रोग्राम में है जिसका अर्थ क्लोन() विधि को सुपर क्लास (ऑब्जेक्ट क्लास) से कहा जाता है, न कि बाल वर्ग से।

मार्कर इंटरफेस: इसका सही मार्कर इंटरफेस खाली इंटरफ़ेस यह गुण और व्यवहार में शामिल नहीं करता है। अब, सवाल उठाया जा सकता है।

प्रश्न हमारे कार्यक्रम में उपयोग किए जाने पर पूर्वनिर्धारित मार्कर इंटरफ़ेस को कौन लागू करेगा?

उत्तर: जेवीएम उस जिम्मेदारी को ले जाएगा क्योंकि, जेवीएम के अंदर मार्कर इंटरफ़ेस कार्यक्षमता परिभाषित की गई है, इसलिए यह आपके लिए प्रोग्राम की कुछ अग्रिम कार्यक्षमता लागू और जोड़ती है।

तो प्रोग्रामर को Clonable मार्कर इंटरफ़ेस लागू करने की आवश्यकता नहीं है, JVM उस ज़िम्मेदारी को ले जाएगा।

2

मार्कर इंटरफ़ेस क्या है?

इंटरफ़ेस जिसमें कार्यान्वित करने के लिए कोई विधि नहीं है, को मार्कर या टैग इंटरफेस कहा जाता है।

मार्कर इंटरफेस क्यों?

मार्कर इंटरफेस रखने का मूल विचार यह उल्लेख करना है कि कक्षा एक इंटरफ़ेस को कार्यान्वित कर रही है जिसमें व्यवहार अंतर्निहित है। कक्षा से इंटरफेस द्वारा परिभाषित अनुबंध का पालन करने के लिए कुछ भी लागू करने की उम्मीद नहीं है। इसके विपरीत यह एक अपेक्षित कार्यक्षमता के बारे में JVM को स्पष्ट रूप से निष्पादित करने के लिए इंगित करना है।

जावा उदाहरण

  • Serializable - पात्र रिमोट वस्तुओं के इस प्रकार क्रमानुसार करने - उदाहरणों
  • के एक क्षेत्र के लिए क्षेत्र की नकल पात्र जा सकते हैं - पात्र दूरस्थ विधि Clonnable कॉल इस प्रकार है

क्या हम कस्टम मार्कर इंटरफेस बना सकते हैं?

हां, यह संभव है।

+0

आपने पहले ही यह उत्तर पोस्ट किया है [यहां] (https: //stackoverflow.com/a/46110495/1729265)। कृपया एक ही उत्तर को कई बार पोस्ट न करें बल्कि इसके बजाय प्रश्नों को डुप्लिकेट के रूप में चिह्नित करें। – mkl

+0

निश्चित रूप से, यह काम करेगा। जानकारी के लिए धन्यवाद। –

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