2009-08-12 12 views

उत्तर

14

चूंकि आप स्काला ऑब्जेक्ट की गहरी प्रतिलिपि बनाने का सबसे आसान तरीका चाहते हैं, न कि सबसे तेज़, आप ऑब्जेक्ट को हमेशा क्रमबद्ध कर सकते हैं, बशर्ते कि यह क्रमबद्ध हो, और फिर इसे वापस बेकार कर दें। निम्नलिखित कोड केवल संकलित करते समय चलाया जाता है, आरईपीएल में नहीं।

def deepCopy[A](a: A)(implicit m: reflect.Manifest[A]): A = 
    util.Marshal.load[A](util.Marshal.dump(a)) 

val o1 = new Something(...) // "Something" has to be serializable 
val o2 = deepCopy(o1) 
+1

अच्छा जवाब! इससे ज्यादा आसान नहीं हो सकता! –

+0

मैंने थोड़ा [परीक्षण] किया था (https://gist.github.com/4409b8562ac24fc042b0) लेकिन मुझे _ClassNotFoundException_ (और केस क्लास क्रमबद्ध करने योग्य हैं) प्राप्त करते रहेंगे। – Tralamazza

6

जावा-विशिष्ट समाधान (जो स्कैला में भी बहुत अच्छा काम करना चाहिए), Cloner library है। यह फ़ील्ड (प्रतिबिंब का उपयोग करके) के आधार पर तेज़, आसान, गहराई से क्लोन ऑब्जेक्ट्स है, और यह ज्ञात है कि ज्ञात अपरिवर्तनीय वस्तुओं (जैसे स्ट्रिंग, इंटेगर इत्यादि) को क्लोन न करें। अंत में, आप कस्टम अपरिवर्तनीय वस्तुओं को पंजीकृत कर सकते हैं ताकि यह उन्हें क्लोन न करे।

मैं अत्यधिक अनुशंसा करता हूं।

+0

पहली बार मैं Cloner पुस्तकालय के बारे में सुना है। बहुत आसान लगता है! –

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

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