मैं कक्षा पुस्तकालय विकसित कर रहा हूं।अपरिवर्तनीय कक्षाओं के लिए क्लोन() लागू करना
- मेरे पास matrices के लिए एक सार बेस क्लास मैट्रिक्स है जो कुछ बुनियादी तरीकों के लिए कार्यान्वयन प्रदान करता है।
- मैट्रिक्स से व्युत्पन्न विभिन्न प्रकार के मैट्रिस के लिए ठोस उप-वर्ग हैं।
- मैट्रिक्स के लिए क्लोन करने योग्य होने की आवश्यकता है, इसलिए मैट्रिक्स क्लोनेबल इंटरफ़ेस लागू करता है।
- मैट्रिक्स से व्युत्पन्न वर्ग के कुछ अपरिवर्तनीय हैं
यह अपरिवर्तनीय वर्गों 'क्लोन तरीकों कि बजाय वस्तु का क्लोन लौटने का, वस्तु ही दिया जाता है के लिए स्वीकार्य होगा?
कुछ (oversimplified) स्पष्टीकरण के लिए कोड:
abstract class Matrix implements Cloneable {
...
}
class ImmutableMatrix extends Matrix {
ImmutableMatrix clone() {
return this;
}
...
}
class SomeOtherMatrix extends Matrix {
SomeOtherMatrix clone() {
SomeOtherMatrix other = super.clone();
...
return other;
}
...
}
क्यों आपकी ऑब्जेक्ट्स को पहले स्थान पर क्लोन करने की इजाजत दी गई है? –
मूल संचालन के चारों ओर एक छोटे से आवरण को वापस करके और फ्लाई पर मूल्यों की गणना करके कुछ संचालन (जैसे पारदर्शिता) को आसानी से कार्यान्वित किया जा सकता है। इसके अलावा, आप कुछ परिस्थितियों में स्मृति पदचिह्न को कम कर सकते हैं (यानी बड़े स्पैस मैट्रिस पर संचालन)। यह तब तक ठीक काम करता है जब तक मूल मैट्रिक्स अपरिवर्तनीय न हो। अन्यथा मूल मैट्रिक्स में किए गए किसी भी बदलाव के परिणामस्वरूप दुष्प्रभाव होंगे। लेकिन अब मैंने इसे प्राप्त करने योग्य() विधि प्रदान करके हल किया है कि अपरिवर्तनीय उप-वर्गों के लिए केवल ऑब्जेक्ट स्वयं ही लौटाता है, जबकि उत्परिवर्तनीय उप-वर्ग एक अपरिवर्तनीय प्रतिलिपि लौटाते हैं। और क्लोनिंग नहीं। – Axel