2011-10-06 12 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 
..... 

İstediğim dinamik her üyesinde bu Sınıfım tüm üyelerini çapraz ve çalışacaktırBirleştirme Nasıl Java

object1.merge(object2); 

gibi bir şey

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

böyle bir mi olduğu dinamik Nesneleri Java'da mekanizma var mı?

cevap

8

sınıftaki alanlara gidin. 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);  
} 

ve değerleri maç. Farklılarsa, değeri güncelleyin.

1

Yansıma kullanarak böyle bir yöntemi kendiniz yazabilirsiniz (Class.getFields() ile başlayın), ancak bunu standart API'larda yapan hiçbir araç yoktur.

0

Hiçbir şey yerleşik değil. Ancak, Dozer'a bakmak isteyebilirsiniz. Belki biraz düzeltme yaparak bunu yapabilir.

Bunu yansımayı kullanarak da yapabilirsiniz (Dozer ne yapar). Yansımayı kullanın.

2

Yansıma bir harita alanları muhafaza etmek olurdu daha etkilidir bir seçenek: Bu birleştirme daha verimli kılacak fakat genel saha erişim az verimli kılacak

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); 
     } 
    } 
} 

.

İlgili konular