繁体   English   中英

从同一类的另一个实例填充对象字段

[英]Populate object fields from another instance of the same class

我有两个相同类的实例:一个实例在其所有字段中都有值,另一个实例仅在某些字段中(其他字段为null)。 我想使用第二个对象的值来更新第一个对象的值,只要它不为null。 像这样:

class MyObject {
    private void setObject(MyObject other) {
        if (other.getField1() != null) this.field1 = other.getField1();
        .....                
    }
}

当我有很多字段时,setObject方法的代码确实很长,并且需要在所有对象中实现该方法。 我想知道是否可以用更通用的方式完成:获取对象作为参数->遍历其字段->如果不为null则填充。

我尝试使用某种反射来执行此操作,但目前未成功。

我想你需要这样的东西

class MyObject{

public Integer a;
public Integer b;
public Integer c;
}

public class Reflect {

    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        // TODO Auto-generated method stub
        MyObject a = new MyObject();
        a.a=4;
        MyObject b = new MyObject();
        b.a=2;
        b.b=3;
        b.c=5;
        GenericInstancePopulateMethod(MyObject.class, a, b);

        System.out.println(a.b);//this prints 3 as expected
        System.out.println(a.a);//this prints 4 as expected
    }
    static void GenericInstancePopulateMethod(Class<MyObject> clz, MyObject a, MyObject b) throws IllegalArgumentException, IllegalAccessException{

        Field[] fields = clz.getFields();

        for(Field f : fields){
        if(f.get(a) == null)
            f.set(a,  f.get(b)) ;//a fields  are assigned b fields' values
        }
    }
}

我使用Field[]但如果有getter和setter方法,则可以使用Method[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM