प्रभावी जावा में, लेखक कहा गया है कि: एक वर्ग Cloneable लागू करताऑब्जेक्ट.क्लोन() द्वारा किया गया यह फ़ील्ड-बाय-फील्ड कॉपी क्या है?
हैं, तो वस्तु का क्लोन विधि वस्तु का एक क्षेत्र द्वारा क्षेत्र प्रतिलिपि रिटर्न; अन्यथा यह CloneNotSupportedException फेंकता है।
मैं क्या जानना चाहता हूं कि वह क्षेत्र-दर-क्षेत्र प्रतिलिपि के साथ क्या मतलब है। क्या इसका मतलब यह है कि यदि कक्षा में एक्स बाइट्स मेमोरी है, तो यह सिर्फ उस स्मृति के टुकड़े की प्रतिलिपि बनायेगा? यदि हां, तो क्या मैं मान सकता हूं कि मूल वर्ग के सभी मूल्य प्रकारों को नई वस्तु में कॉपी किया जाएगा? क्या Object.clone()
करता Point
वर्ग के क्षेत्र प्रतिलिपि द्वारा एक क्षेत्र है
class Point implements Cloneable{
private int x;
private int y;
@Override
public Point clone() {
return (Point)super.clone();
}
}
हैं, मैं कहेंगे कि मैं स्पष्ट रूप से क्षेत्रों x
और y
कॉपी करने के लिए, जा रहा है कि ऊपर दिखाए गए कोड की तुलना में अधिक हो जाएगा की जरूरत नहीं होगी Point
कक्षा का क्लोन बनाने के लिए पर्याप्त है। यही है, कोड का निम्नलिखित बिट अनावश्यक है:
@Override
public Point clone() {
Point newObj = (Point)super.clone();
newObj.x = this.x; //redundant
newObj.y = this.y; //redundant
}
क्या मैं सही हूँ?
मुझे पता है कि क्लोन ऑब्जेक्ट के संदर्भ स्वचालित रूप से उस बिंदु पर इंगित करेंगे जहां मूल ऑब्जेक्ट के संदर्भों की ओर इशारा किया गया है, मुझे यकीन नहीं है कि विशेष रूप से मूल्य प्रकारों के साथ क्या होता है। अगर कोई स्पष्ट रूप से बता सकता है कि Object.clone()
का एल्गोरिदम विनिर्देशन (आसान भाषा में) है जो बहुत अच्छा होगा।
आप जावा के क्लोनिंग का उपयोग क्यों नहीं करेंगे और अपनी खुद की विधि लिखेंगे? कोई विशिष्ट कारण? – zengr
प्रभावी जावा पढ़ें। ऐसे बहुत से हैं। –
http://www.javapractices.com/topic/TopicAction.do?Id=71 –