क्लोन पद्धत आणि क्लोन करण्यायोग्य इंटरफेस - १

"हाय, अमिगो!"

"हाय, किम."

"मी तुम्हाला क्लोन() पद्धतीबद्दल सांगणार आहे."

"या पद्धतीचा मुद्दा म्हणजे ऑब्जेक्ट क्लोन करणे किंवा दुसऱ्या शब्दांत, ऑब्जेक्टची क्लोन/कॉपी/डुप्लिकेट तयार करणे."

"जेव्हा ही पद्धत कॉल केली जाते, तेव्हा Java व्हर्च्युअल मशीन ज्या ऑब्जेक्टवर कॉल केला जातो त्याची डुप्लिकेट तयार करते आणि परत करते.

क्लोन पद्धतीची ऑब्जेक्ट क्लासची अंमलबजावणी अतिशय प्राचीन आहे: फक्त एक नवीन ऑब्जेक्ट तयार केला जातो आणि मूळ ऑब्जेक्टच्या फील्डची मूल्ये त्याच्या फील्डमध्ये नियुक्त केली जातात.

कॉपी केलेल्या ऑब्जेक्टमध्ये इतर ऑब्जेक्ट्सचे संदर्भ असल्यास, ते संदर्भ कॉपी केले जातील. त्या वस्तूंचे डुप्लिकेट तयार केले जाणार नाहीत."

"हम्म. त्यापेक्षा जास्त काही नाही."

"गोष्ट अशी आहे की, जावा व्हर्च्युअल मशीनला माहित नसते की कोणत्या वस्तू क्लोन केल्या जाऊ शकतात किंवा नाही. उदाहरणार्थ, फाइल्स क्लोन केल्या जाऊ शकत नाहीत. सिस्टम.इन प्रवाहासाठी हेच खरे आहे."

"म्हणून, पूर्ण वाढ झालेला क्लोनिंगचा प्रश्न वर्गाच्या विकसकांना देण्यात आला. "हे सर्व समान पद्धती कसे हाताळले जाते यासारखेच आहे. हॅशकोडशी तुलना करण्यायोग्य काहीतरी आहे: क्लोन करण्यायोग्य इंटरफेस."

" क्लोनेबल इंटरफेस ज्याला 'मार्कर इंटरफेस' म्हणतात: त्यात कोणत्याही पद्धती नाहीत आणि विशिष्ट वर्ग चिन्हांकित करण्यासाठी वापरला जातो.

"जर वर्गाच्या विकसकाला वर्गातील वस्तू क्लोन केल्या जाऊ शकतात असे वाटत असेल, तर तो या इंटरफेससह चिन्हांकित करतो (म्हणजे क्लासला क्लोन करण्यायोग्य बनवतो).

"विकासकाला क्लोन पद्धतीची मानक अंमलबजावणी आवडत नसल्यास, त्याने स्वतःचे लिहावे जे योग्य मार्गाने डुप्लिकेट ऑब्जेक्ट तयार करेल."

"जेव्हा तुम्ही क्लोन () मेथडला कॉल करता, तेव्हा जावा ऑब्जेक्ट क्लोन करण्यायोग्य इंटरफेसला सपोर्ट करते की नाही ते तपासते. जर तसे झाले, तर ते क्लोन ( ) पद्धतीचा वापर करून ऑब्जेक्ट क्लोन करते; नसल्यास, ते CloneNotSupportedException फेकते."

"दुसर्‍या शब्दात, आपण एकतर क्लोन पद्धत ओव्हरराइड केली पाहिजे किंवा क्लासची अंमलबजावणी क्लोन करण्यायोग्य केली पाहिजे?"

"होय, पण तरीही तुम्हाला पद्धत ओव्हरराइड करायची आहे. क्लोन() पद्धत संरक्षित म्हणून घोषित केली आहे, म्हणून ती फक्त त्याच्या पॅकेजमधील वर्गांद्वारे कॉल केली जाऊ शकते (java.lang. * किंवा त्यांच्या उपवर्ग."

"मी थोडा गोंधळलो आहे-मग एखादी वस्तू क्लोन करण्यासाठी मला काय करावे लागेल?"

"तुम्हाला ऑब्जेक्ट क्लासची «डीफॉल्ट» क्लोनिंग पद्धत वापरायची असल्यास, तुम्हाला हे करणे आवश्यक आहे:

" अ) क्लोन करण्यायोग्य इंटरफेस तुमच्या वर्गात जोडा"

" b) क्लोन पद्धत ओव्हरराइड करा आणि तुमच्या अंमलबजावणीमध्ये सुपरक्लासच्या अंमलबजावणीला कॉल करा:"

class Point implements Cloneable
{
 int x;
 int y;

 public Object clone()
 {
  return super.clone();
 }
    }

"किंवा तुम्ही क्लोन पद्धतीची अंमलबजावणी स्वतःच लिहू शकता:"

class Point
{
 int x;
 int y;

 public Object clone()
 {
  Point point = new Point();
  point.x = this.x;
  point.y = this.y;
  return point;
 }
}

"ही एक मनोरंजक पद्धत आहे. मला खात्री आहे की मी ती वापरेन. अधूनमधून..."