2011-10-06 9 views
5
public class MyClass{ 
    public String elem1; 
    public int elem2; 
    public MyType elem3; 
................. 
} 

MyClass object1=new MyClass(); 
MyClass object2=new MyClass(); 
object1.elem1=... 
object1.elem2=... 
... 
object2.elem1=... 
object2.elem2=null 
..... 

क्या मैं चाहता हूँ की तरहकैसे मर्ज करने के लिए जावा ऑब्जेक्ट्स गतिशील रूप

object1.merge(object2); 

कुछ जहां यह गतिशील हर सदस्य पर MyClass पर सभी सदस्यों को पार और चलेंगे इस

if(object1.elem != object2.elem && object2.elem!=null) 
object1.elem=object2.elem; 

इस तरह के एक है है जावा में तंत्र मौजूद है?

उत्तर

8

प्रतिबिंब का उपयोग करें। कक्षा के क्षेत्रों में जाना। Psuedo:

Field[] fields = aClass.getFields(); 
for (Field field : fields) { 
    // get value 
    Object value = field.get(objectInstance); 
    // check the values are different, then update 
    field.set(objetInstance, value);  
} 

और मानों से मेल खाते हैं। यदि वे भिन्न हैं, तो मान अपडेट करें।

1

आप प्रतिबिंब का उपयोग करके स्वयं को इस तरह की एक विधि लिख सकते हैं (Class.getFields() से शुरू करें), लेकिन मानक एपीआई में ऐसा कोई उपकरण नहीं है।

0

इसमें कुछ भी नहीं बनाया गया है। हालांकि आप Dozer पर एक नज़र रखना चाहते हैं। शायद कुछ tweaking के साथ यह करने में सक्षम हो जाएगा।

आप प्रतिबिंब का उपयोग करके यह भी कर सकते हैं (जो डोज़र करता है)।

2

अधिक कुशल से प्रतिबिंब मानचित्र में खेतों स्टोर करने के लिए होता है कि एक विकल्प:

Map<String, Object> fields; 

void merge(MyClass other){ 
    for (String fieldName : fields.keys()){ 
     Object thisValue = this.fields.get(key); 
     Object otherValue = other.fields.get(key); 
     if (thisValue != otherValue && otherValue != null){ 

       this.fields.put(fieldName, otherValue); 
     } 
    } 
} 

इस मर्ज और अधिक कुशल बनाने हैं लेकिन सामान्य क्षेत्र का उपयोग कम कुशल बनाना होगा।

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