2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
कृपया जावाभाषायां गभीरप्रतिलिपिः उथलप्रतिलिपिः च इति भेदं व्याख्यातव्यम् ।
जावा मध्ये Deep Copy तथा Shallow Copy इति वस्तुनां प्रतिलिपिकरणस्य द्वौ मार्गौ स्तः वस्तुनां प्रतिलिपिं कुर्वन् तेषां व्यवहारः मूलतः भिन्नः भवति ।
उथलं प्रतिलिपिः नूतनवस्तुनः निर्माणं ततः वर्तमानवस्तुनः अस्थिरक्षेत्राणां प्रतिलिपिं नूतनवस्तुनि निर्दिशति यदि क्षेत्रं मूल्यप्रकारः अस्ति, तर्हि क्षेत्रं बिट् बिट् प्रतिलिपिकृतं भवति, यदि क्षेत्रं सन्दर्भप्रकारः अस्ति सन्दर्भः प्रतिलिपितः अस्ति किन्तु न सन्दर्भितं वस्तु प्रतिलिपितः नास्ति। अतः मूलवस्तु तस्य प्रतिलिपिः च एकमेव वस्तु निर्दिशति ।
जावायां एतत् साधयितुं शक्यतेCloneable
अन्तरफलकं पुनर्लेखनं चclone()
उथलं प्रतिलिपिं कार्यान्वितुं विधिः।Object
कक्षायांclone()
एषा पद्धतिः अतल्लीनप्रतिलिपिं प्राप्तुं शक्नोति ।
class Original implements Cloneable { | |
private int[] nums; | |
public Original() { | |
nums = new int[5]; | |
} | |
public void setNums(int[] nums) { | |
this.nums = nums; | |
} | |
public Object clone() throws CloneNotSupportedException { | |
return super.clone(); | |
} | |
} |
अस्मिन् उदाहरणे .nums
सन्दर्भप्रकारः अस्ति ।यदिOriginal
वस्तु अतल्लीनप्रतिलिपिता, ततःnums
आदिवस्तुनि चnums
समानं सरणीवस्तुं दर्शयिष्यति ।
गहनप्रतिलिपिः न केवलं वस्तुनः एव प्रतिलिपिं करोति, अपितु वस्तुनि समाविष्टानां सर्वेषां सन्दर्भप्रकारस्य सदस्यचरानाम् पुनरावर्तनीयरूपेण प्रतिलिपिं करोति, यस्य अर्थः अस्ति यत् प्रतिलिपिः मूलवस्तु च किमपि सन्दर्भप्रकारस्य सदस्यचरं न साझां करिष्यति एकस्य वस्तुनः कस्यापि सदस्यचरस्य परिवर्तनेन अन्यस्य वस्तुनः प्रभावः न भविष्यति ।
जावा मध्ये गहनप्रतिलिपिनां कार्यान्वयनार्थं प्रायः सन्दर्भप्रकारस्य सर्वेषां सदस्यचरानाम् समुचितप्रतिलिपिः भवति इति सुनिश्चित्य कोडं मैन्युअल् रूपेण लिखितुं आवश्यकं भवति ।
class DeepCopied implements Cloneable { | |
private int[] nums; | |
public DeepCopied() { | |
nums = new int[5]; | |
} | |
public void setNums(int[] nums) { | |
this.nums = nums; | |
} | |
@Override | |
public Object clone() throws CloneNotSupportedException { | |
DeepCopied copied = (DeepCopied) super.clone(); | |
copied.nums = nums.clone(); // 对引用类型的成员变量也进行拷贝 | |
return copied; | |
} | |
} |
अस्मिन् उदाहरणे .nums
सरणी अपि प्रतिलिपितः भवति, अतः मूलवस्तु प्रतिलिपिः च न साझाः भवन्तिnums
सरणी ।
गहनप्रतिलिपिः अथवा उथलप्रतिलिपिः उपयोक्तुं चयनं विशिष्टानुप्रयोगपरिदृश्यानां आवश्यकतानां च उपरि निर्भरं भवति ।
जावादेशे अनामिकाः आन्तरिकवर्गाः के सन्ति ? तस्य अनुप्रयोगपरिदृश्याः के सन्ति ?