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

标签 java reflection

我有同一类的两个实例:一个在其所有字段中都有值,另一个只有一些字段(其他字段为空)。 我想使用第二个对象的值更新第一个对象的值,前提是它不为空。像这样的事情:

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

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

我尝试使用一些反射来做到这一点,但目前没有成功。

最佳答案

我认为你需要这样的东西

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[]

关于java - 从同一类的另一个实例填充对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982162/

相关文章:

.net - 通过反射查找 FieldRef 和 FieldDef 元数据标记

c# - 如何获取具有给定类型的类实例的所有成员?

java.io.IOException : No FileSystem for scheme: abfs for adls-gen 2 in spark java

java.lang.IllegalStateException : Orca SharedPreferences used before initialized 错误

java - WeakHashMap 和强引用值

java - 如何防止客户端发送文件后服务器接收到空输出(多线程java套接字)

java - 如何在另一个类中使用 Queue.java

reflection - AutoMapper 和反射

c# - Fastmember 访问非公共(public)属性

c# - .NET FieldInfo——获取它*是*一个字段的对象