2012-07-14 13 views
6

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

मैं हमेशा अपनी कक्षा में एक सार्वजनिक ऑब्जेक्ट क्लोन() विधि बना सकता हूं। क्लोनेबल इंटरफ़ेस का वास्तविक उद्देश्य क्या है?

उत्तर

4

ऐसा इसलिए है क्योंकि clone() विधि फेंकता है यदि आपकी ऑब्जेक्ट Cloneable नहीं है।

आपको documentation for clone() विधि पर एक नज़र डालना चाहिए।

के बाद कैसे clone() विधि वर्ग Object में घोषित किया जाता है:

protected Object clone() throws CloneNotSupportedException 

नोट:

इसके अलावा, यह महसूस किया गया है कि Clone टूटी हुई है। एसओ में This answer यहां बताता है कि आप इसका उपयोग क्यों और कैसे कर सकते हैं।

1

Cloneable बनाना एक मार्कर इंटरफ़ेस एक गलती थी।

यह कहा गया है कि यह एक चीज में clone() के डिफ़ॉल्ट कार्यान्वयन को "सक्षम" करती है। यदि आप implement Cloneable नहीं हैं तो super.clone() का आह्वान CloneNotSupportedException फेंक देगा।

+0

क्या आप समझा सकते हैं कि यह एक गलती क्यों थी? –

+2

@MarkRotteveel क्लोनेबल इंटरफ़ेस में क्लोन विधि होनी चाहिए, और ऑब्जेक्ट में संरक्षित क्लोन विधि को "सक्रियण" की आवश्यकता नहीं होनी चाहिए। एक अच्छा नाम और भ्रम पैदा करने के दौरान, इंटरफ़ेस के रूप में यह खड़ा है, कोई वास्तविक उपयोगी उद्देश्य नहीं है। –

1

कुछ लोगों का कहना है कि यह सी ++ से प्रति निर्माता की नकल करने का प्रयास है, लेकिन इसके बारे में यहाँ StackOverflow पर पिछले समान सवाल है: About Java cloneable

1

उद्देश्य javadoc में निर्दिष्ट है। यह निर्दिष्ट करना है कि इस प्रकार की किसी वस्तु के क्लोनिंग की अनुमति है।

अपनी कक्षा clone() के अंतर्निहित कार्यान्वयन (Object.clone() विधि द्वारा प्रदान की) पर निर्भर करता है, तो इस मार्कर इंटरफ़ेस क्षेत्र द्वारा क्षेत्र क्लोनिंग सक्षम बनाता है। (यदि आप फोन में निर्मित एक वस्तु है कि Cloneable को लागू नहीं करता है पर क्लोन विधि, आप एक CloneNotSupportedException मिलता है।)

1

क्लोन का उद्देश्य() विधि वस्तु का एक नया उदाहरण (कॉपी) बनाने जिस पर यह है बुलाया। जैसा कि आप उपयोग क्लोन विधि के उत्तर में देख सकते हैं, आपकी कक्षा को क्लोनेबल इंटरफ़ेस लागू करना चाहिए। आप क्लोन को कार्यान्वित करने का तरीका चुन सकते हैं, आप अपनी कक्षा के लिए उथले या गहरी प्रतिलिपि कर सकते हैं। आप उदाहरण http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/ देख सकते हैं।

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