2011-10-14 12 views
6

मैंने Object और Cloneable दोनों के लिए जावाडोक पढ़ा है और मैं कुछ "प्राप्त नहीं कर रहा हूं"। कोई प्रदर्शन और/या कार्यात्मक दो निम्न उदाहरण के लिए मतभेद मुझे समझा कृपया कर सकते हैं:क्लोनेबल के साथ और बिना क्लोन ओवरराइडिंग

public class Widget 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

..और:

public class Widget implements Cloneable 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

Cloneable चूंकि यह से बंधा किसी भी विधि नहीं है, और केवल आपको Object की संरक्षित क्लोन() विधि तक पहुंच प्रदान करता है, क्या यह कभी भी इसे पहले स्थान पर लागू करने के लिए समझ में आता है, यह देखते हुए कि आपको अपने स्वयं के (सुरक्षित) क्लोन() कोड को किसी भी तरह से लिखना होगा ? किसी भी स्पष्टीकरण/इनपुट के लिए अग्रिम धन्यवाद।

उत्तर

5

यह contractual obligation है।

एक उदाहरण है कि लागू नहीं करता है अपवाद CloneNotSupportedException में Cloneable इंटरफ़ेस परिणामों पर वस्तु का क्लोन विधि लागू फेंक दिया जा रहा है।

जबकि वहाँ ओवरराइड करने के लिए कोई तरीकों हो सकता है, आप अभी भी एक इंटरफ़ेस आप का हिस्सा हैं कार्यान्वित कर रहे हैं। ऐसा करने में आप उसके बाद के अनुबंध के साथ आता है। यह आपको clone() विधि को जानबूझकर कार्यान्वित करने के लिए मजबूर करता है जिससे व्यवहार स्पष्ट हो जाता है।

+0

बहुत रोचक - धन्यवाद! – IAmYourFaja

+0

लिंक अब काम नहीं करता है – marcospgp

0

ए) क्लोनिंग ऑब्जेक्ट्स बनाने के extralinguistic तरीके का आह्वान करता है - बिना रचनाकारों के।

बी) क्लोनिंग के लिए आपको किसी भी तरह क्लोन नॉटस्परपोर्ट अपवाद के साथ इलाज करने की आवश्यकता है - या इसका इलाज करने के लिए क्लाइंट कोड को परेशान करने के लिए।

सी) लाभ छोटे हैं - आपको मैन्युअल रूप से एक प्रतिलिपि बनाने वाला निर्माता लिखना नहीं है। तो, क्लोनेबल न्यायिक रूप से उपयोग करें। यह आपको सही करने के लिए आवेदन करने की आवश्यकता के साथ तुलना करने के लिए पर्याप्त लाभ नहीं देता है।

About Java cloneable

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