簡體   English   中英

如何動態合並Java對象

[英]How to Merge Java Objects Dynamically

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;

Java中是否存在這樣的機制?

用反射。 走過課堂。 偽:

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

並匹配值。 如果它們不同,則更新該值。

比Reflection更有效的選項是將字段存儲在地圖中:

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

這將使合並更有效,但會使一般的現場訪問效率降低。

您可以使用反射自己編寫這樣的方法(從Class.getFields()開始),但是沒有工具在標准API中執行此操作。

是的,它是可能的,它被稱為反射

內置任何東西。但是你可能想看看Dozer 也許通過一些調整,它將能夠做到這一點。

您也可以使用反射(這是Dozer所做的)來完成此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM