我有两个相同类型的对象.我想创建一个方法,它可以合并两个对象的属性,并可以返回一个对象.
例如:考虑具有4个字段的ABC类
Class ABC{
String name;
String id;
String salary;
String status;
}
假设第一个对象是
ABC[name=ZEE,id=2,salary=null,status=1]
第二个对象是
ABC[name=john,id=null,salary=12200,status=null]
我想创建一个可以合并这两个对象的泛型方法,并可以将结果输出为:
ABC[name=ZEE,id=2,salary=12200,status=1]
该方法应该采用Object类型的两个参数:
Object  mergeObject(Object Obj1, Object Obj2){
}
注意:如果两个对象都具有该属性的非null值,则将采用第一个对象属性.
Epi*_*rce 16
你将不得不走反射路线.我假设你有一个默认的构造函数,否则以下将无法正常工作.此外,它需要两种相同的类型.它不会复制继承的字段,因此,您还需要从此处添加一些代码.
@SuppressWarnings("unchecked")
public static <T> T mergeObjects(T first, T second) throws IllegalAccessException, InstantiationException {
    Class<?> clazz = first.getClass();
    Field[] fields = clazz.getDeclaredFields();
    Object returnValue = clazz.newInstance();
    for (Field field : fields) {
        field.setAccessible(true);
        Object value1 = field.get(first);
        Object value2 = field.get(second);
        Object value = (value1 != null) ? value1 : value2;
        field.set(returnValue, value);
    }
    return (T) returnValue;
}
这是一个例子
public static class ABC {
    private int id;
    private String name;
    private int[] numbers;
    public ABC() {
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int[] getNumbers() {
        return numbers;
    }
    public void setNumbers(int[] numbers) {
        this.numbers = numbers;
    }
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    ABC abc = new ABC();
    abc.setId(1);
    abc.setName("Hello");
    int[] newnumbers = new int[5];
    for(int i = 0; i < newnumbers.length; i++) {
        newnumbers[i] = i;
    }
    abc.setNumbers(newnumbers);
    ABC abc2 = new ABC();
    abc2.setName("World");
    ABC abcFinal = mergeObjects(abc, abc2);
    System.out.println("Properties of ABC Final:");
    System.out.println("ID: " + abcFinal.getId());
    System.out.println("Name: " + abcFinal.getName());
    System.out.println("Numbers: " + Arrays.toString(abcFinal.getNumbers()));
}
输出:
Properties of ABC Final:
ID: 1
Name: Hello
Numbers: [0, 1, 2, 3, 4]
| 归档时间: | 
 | 
| 查看次数: | 14755 次 | 
| 最近记录: |