2010-03-29 20 views
6

पर ऑब्जेक्ट कॉपी करें क्या किसी मौजूदा ऑब्जेक्ट को किसी अन्य में कॉपी करने का कोई सामान्य तरीका है?किसी अन्य

मान लें MyObj में id और name फ़ील्ड हैं। इस तरह: है कि वे अलग-अलग विविधताएं हैं, लेकिन समान गुण होते हैं

myObj_2.copyFrom(myObj_1) 

तो:

MyObj myObj_1 = new MyObj(1, "Name 1"); 
MyObj myObj_2 = new MyObj(2, "Name 2"); 

के बजाय

myObj_2.setName(myObj_1.getName()) // etc for each field 

निम्नलिखित के रूप में कुछ करना।

+1

देख http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object – karlipoppins

+1

यह [उत्तर] (http: // stackoverflow। कॉम/प्रश्न/869033/कैसे करें-i-copy-an-object-in-java/9834683 # 9834683) आपकी मदद करेगा। –

उत्तर

4
+3

हालांकि यह सही है, यहोशू ब्लोच प्रभावी जावा में क्लोन का उपयोग करने के खिलाफ चेतावनी देता है। एक प्रतिलिपि बनाने के लिए बेहतर है। –

0

क्लोन() - विधि वास्तव में इस काम के लिए है।

8

सम्मेलन निर्माण समय पर एक निर्माता के साथ ऐसा करना है जो अपने स्वयं के प्रकार का एक पैरामीटर लेता है।

MyObj myObj_2 = नया MyObj (myObj_1);

किसी ऑब्जेक्ट के मौजूदा गुणों को किसी अन्य से ओवरराइट करने के लिए कोई जावा सम्मेलन नहीं है। यह जावा में अपरिवर्तनीय वस्तुओं के लिए प्राथमिकता के खिलाफ जाता है (जहां संपत्ति निर्माण समय पर सेट की जाती है जब तक कि कोई अच्छा कारण न हो)।

संपादित करें: क्लोन() के संबंध में, कई इंजीनियरों ने आधुनिक जावा में इसे हतोत्साहित किया क्योंकि इसमें पुराने वाक्यविन्यास और अन्य दोष हैं। http://www.javapractices.com/topic/TopicAction.do?Id=71

0

आप अपने क्लोन दिनचर्या के कार्यान्वयन को स्वचालित करने के लिए आत्मनिरीक्षण का उपयोग कर सकते हैं, ताकि आप सुरक्षित रह सकें, आप कुछ फ़ील्ड कॉपी करना न भूलें।

7

उपयोग प्रतिलिपि निर्माता:

public class YourObject { 
    private String name; 
    private int age; 

    public YourObject(YourObject other) { 
    this.name = other.name; 
    this.age = other.age; 
    } 
} 
0

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

public class CloneExample implements Cloneable 
{ 
    int id; 
    String name; 

    CloneExample(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

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

    public static void main(String[] args) { 
     CloneExample obj1 = new CloneExample(1,"Name_1"); 

     try { 
      CloneExample obj2 = (CloneExample) obj1.clone(); 
      System.out.println(obj2.id); 
      System.out.println(obj2.name); 
     } catch (CloneNotSupportedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
संबंधित मुद्दे