2012-05-17 9 views
11

एक नौसिखिया प्रश्न के लिए खेद है, लेकिन जावा/एंड्रॉइड में ऑब्जेक्ट की प्रतिलिपि बनाने/क्लोन करने का सबसे अच्छा तरीका क्या होगा?एंड्रॉइड में किसी ऑब्जेक्ट को क्लोन कैसे करें?

rlBodyDataObj rlbo = bdoTable.get(name); 

अभी कोड एक hashtable से एक वस्तु प्रदान करती है, फिर भी मैं इसे का एक क्लोन प्राप्त करने की आवश्यकता है, ताकि मैं इसे कई बार उपयोग करने में सक्षम होगा।

धन्यवाद!

+0

हो सकता है कि क्लोन का उपयोग()? –

+0

इस उत्तर को देखें http://stackoverflow.com/questions/869033/how-do-i-copy-an-object-in-java –

+0

यह मेरी कस्टम ऑब्जेक्ट है, इसमें नहीं है .clone() –

उत्तर

16

सुनिश्चित करें कि आपके DataObj वर्ग को लागू करता है Cloneable करें और निम्न विधि

protected Object clone() throws CloneNotSupportedException { 
     return super.clone(); 
} 

तो फिर तुम फोन करने के लिए (DataObj) rlBodyDataObj.clone में सक्षम होना चाहिए जोड़ने(); एक साफ प्रति प्राप्त करने के लिए (कास्ट नोट करें)।

+0

हां! धन्यवाद, यह काम किया! : =) –

+0

हम्म ... वास्तव में नहीं, कृपया यह प्रश्न देखें :) http://stackoverflow.com/questions/10636673/android-cloned-object-also-clones- new-data-how-to-prevent-that –

+0

आपको विधि जोड़ने की आवश्यकता नहीं है। – EJP

1

कभी-कभी आपको क्लोन() विधि से लौटने से पहले कुछ फ़ील्ड को संशोधित करने की आवश्यकता होती है।

यह जांचें: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#clone()। मैं सुविधा के लिए यहां प्रासंगिक हिस्सा चिपकाया:।

"परंपरा के मुताबिक, वस्तु इस विधि द्वारा दिया इस वस्तु (जो क्लोन किया जा रहा है) की स्वतंत्र होना चाहिए इस स्वतंत्रता प्राप्त करने के लिए, यह आवश्यक हो सकता है ऑब्जेक्ट को वापस लौटने से पहले सुपर.क्लोन द्वारा लौटाए गए ऑब्जेक्ट को संशोधित करने के लिए। आमतौर पर, यह का अर्थ किसी भी म्यूटेबल ऑब्जेक्ट्स को कॉपी करना है जिसमें ऑब्जेक्ट की आंतरिक "गहरी संरचना" शामिल है और संदर्भों को इन ऑब्जेक्ट्स को प्रतिस्थापित कर रहा है प्रतियों के संदर्भ के साथ। यदि किसी वर्ग में केवल आदिम फ़ील्ड या immutabl के संदर्भ हैं ई ऑब्जेक्ट्स, तो यह आमतौर पर मामला है कि सुपर.क्लोन द्वारा ऑब्जेक्ट में कोई भी फ़ील्ड संशोधित करने की आवश्यकता नहीं है। "

+0

धन्यवाद। कृपया इस http://stackoverflow.com/questions/10636673/android-cloned-object-also-clones-new-data-how-to-prevent-that पर एक नज़र डालें, ऐसा लगता है कि क्लोन एकीकृत ऑब्जेक्ट्स जो बाद में असाइन किए गए थे .clone() हुआ ... –

5
class Test implements Cloneable 
    { 
    ... 
     public Object clone() 
     { 
      try 
     { 
       return super.clone(); 
      } 
     catch(CloneNotSupportedException e) 
     { 
       return null; 
      } 
     } 
    ... 
    } 
2

आप Parcelable (स्टूडियो प्लगइन के साथ आसान) को लागू करता है, और फिर

public static <T extends Parcelable> T copy(T orig) { 
    Parcel p = Parcel.obtain(); 
    orig.writeToParcel(p, 0); 
    p.setDataPosition(0); 
    T copy = null; 
    try { 
     copy = (T) orig.getClass().getDeclaredConstructor(new Class[]{Parcel.class}).newInstance(p); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return copy; 
} 
संबंधित मुद्दे